major fixes

This commit is contained in:
Alexander Karpov 2023-08-26 09:53:03 +03:00
parent d784e04ff5
commit aa82f1d956
32 changed files with 105 additions and 139 deletions

5
.env
View File

@ -1,5 +0,0 @@
DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/pitch_deck_generator
CELERY_BROKER_URL=redis://localhost:6379/0
REDIS_URL=redis://localhost:6379/1
USE_DOCKER=no
OPENAI_KEY=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

17
.envs/.local/.django Normal file
View File

@ -0,0 +1,17 @@
# General
# ------------------------------------------------------------------------------
USE_DOCKER=yes
IPYTHONDIR=/app/.ipython
DJANGO_READ_DOT_ENV_FILE=no
# Redis
# ------------------------------------------------------------------------------
REDIS_URL=redis://redis:6379/1
REDIS_CACHE=rediscache://redis:6379/1
CELERY_BROKER_URL=redis://redis:6379/0
# Celery
# ------------------------------------------------------------------------------
# Flower
CELERY_FLOWER_USER=debug
CELERY_FLOWER_PASSWORD=debug

7
.envs/.local/.postgres Normal file
View File

@ -0,0 +1,7 @@
# PostgreSQL
# ------------------------------------------------------------------------------
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=akarpov
POSTGRES_USER=debug
POSTGRES_PASSWORD=debug

16
.envs/.production/.django Normal file
View File

@ -0,0 +1,16 @@
# General
# CHANGE ON REAL SERVER
# ------------------------------------------------------------------------------
USE_DOCKER=yes
DJANGO_READ_DOT_ENV_FILE=no
# Redis
# ------------------------------------------------------------------------------
REDIS_URL=redis://redis:6379/0
CELERY_BROKER_URL=redis://localhost:6379/0
# Celery
# ------------------------------------------------------------------------------
# Flower
CELERY_FLOWER_USER=debug
CELERY_FLOWER_PASSWORD=debug

View File

@ -0,0 +1,7 @@
# PostgreSQL
# ------------------------------------------------------------------------------
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=akarpov
POSTGRES_USER=debug
POSTGRES_PASSWORD=debug

View File

@ -77,4 +77,3 @@ updates:
# Check for updates to GitHub Actions every weekday
schedule:
interval: "daily"

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
!.gitkeep
.idea
.env
### Python template
# Byte-compiled / optimized / DLL files

8
.idea/.gitignore vendored
View File

@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -1,24 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="PyMethodMayBeStaticInspection" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="9">
<item index="0" class="java.lang.String" itemvalue="pytest-instafail" />
<item index="1" class="java.lang.String" itemvalue="cookiecutter" />
<item index="2" class="java.lang.String" itemvalue="binaryornot" />
<item index="3" class="java.lang.String" itemvalue="isort" />
<item index="4" class="java.lang.String" itemvalue="PyGithub" />
<item index="5" class="java.lang.String" itemvalue="pytest-cookies" />
<item index="6" class="java.lang.String" itemvalue="gitpython" />
<item index="7" class="java.lang.String" itemvalue="tox" />
<item index="8" class="java.lang.String" itemvalue="django" />
</list>
</value>
</option>
</inspection_tool>
</profile>
</component>

View File

@ -1,6 +0,0 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (pitch_deck_generator)" project-jdk-type="Python SDK" />
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/pitch_deck_generator.iml" filepath="$PROJECT_DIR$/.idea/pitch_deck_generator.iml" />
</modules>
</component>
</project>

View File

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="FacetManager">
<facet type="django" name="Django">
<configuration>
<option name="rootFolder" value="$MODULE_DIR$" />
<option name="settingsModule" value="config/settings/local.py" />
<option name="manageScript" value="$MODULE_DIR$/manage.py" />
<option name="environment" value="&lt;map/&gt;" />
<option name="doNotUseTestRunner" value="false" />
<option name="trackFilePattern" value="migrations" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">
<option name="format" value="PLAIN" />
<option name="myDocStringFormat" value="Plain" />
</component>
<component name="TemplatesService">
<option name="TEMPLATE_CONFIGURATION" value="Django" />
</component>
</module>

View File

@ -21,7 +21,7 @@ repos:
- id: black
- repo: https://github.com/PyCQA/isort
rev: 5.11.4
rev: 5.12.0
hooks:
- id: isort

View File

@ -2,8 +2,6 @@
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path
from django.views import defaults as default_views
from django.views.generic import TemplateView
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
from rest_framework.authtoken.views import obtain_auth_token

File diff suppressed because one or more lines are too long

View File

@ -1,28 +1,32 @@
import openai
import datetime
from ast import literal_eval
import openai
from django.conf import settings
KEY = settings.OPENAI_KEY
description = """
🍀 Что такое Pitch-Deck?
Pitch-Deck представляет собой презентацию-тизер проекта/компании для инвесторов, партнеров, журналистов и других заинтересованных лиц. Цель презентации - привлечение дополнительного финансирования (инвестиций).
Почему это проблема?
description = """🍀 Что такое Pitch-Deck? Pitch-Deck представляет собой презентацию-тизер проекта/компании для
инвесторов, партнеров, журналистов и других заинтересованных лиц. Цель презентации - привлечение дополнительного
финансирования (инвестиций). Почему это проблема?
🍀 Проблема #1. Недостаток средств:
Для многих стартапов ограниченные финансы создают преграду при разработке качественного Pitch Deck. Отсутствие достаточных средств для найма профессиональных консультантов, дизайнеров и копирайтеров, а также для проведения исследований рынка, может привести к созданию менее привлекательной и малоинформативной презентации, что затрудняет привлечение инвестиций.
🍀 Проблема #1. Недостаток средств: Для многих стартапов ограниченные финансы создают преграду при разработке
качественного Pitch Deck. Отсутствие достаточных средств для найма профессиональных консультантов, дизайнеров и
копирайтеров, а также для проведения исследований рынка, может привести к созданию менее привлекательной и
малоинформативной презентации, что затрудняет привлечение инвестиций.
🍀 Проблема #2. Недостаток экспертизы:
Проблемой для стартапов является недостаток экспертизы для проведения необходимых исследований и корректного отражения их результатов в Pitch Deck. Не всегда у стартапов есть нужные знания в области маркетинга, финансов и анализа рынка, что затрудняет создание убедительной и информативной презентации для привлечения инвестиций.
🍀 Проблема #2. Недостаток экспертизы: Проблемой для стартапов является недостаток экспертизы для проведения
необходимых исследований и корректного отражения их результатов в Pitch Deck. Не всегда у стартапов есть нужные
знания в области маркетинга, финансов и анализа рынка, что затрудняет создание убедительной и информативной
презентации для привлечения инвестиций.
🍀 Проблема #3. Недостаток времени
Молодым компаниям для привлечения инвестиций требуется подготовить целый пакет документов, одним из которых является Pitch Deck. Особенностью стартапов является сравнительного молодая и небольшая команда, у которой чисто физически не хватает времени на разработку инвестиционных материалов, ведь они полностью погружены в процесс разработки и улучшения продукта или сервиса.
🍀 Проблема #3. Недостаток времени Молодым компаниям для привлечения инвестиций требуется подготовить целый пакет
документов, одним из которых является Pitch Deck. Особенностью стартапов является сравнительного молодая и небольшая
команда, у которой чисто физически не хватает времени на разработку инвестиционных материалов, ведь они полностью
погружены в процесс разработки и улучшения продукта или сервиса.
🍀 ИДЕЯ:
Основная идея кейса заключается в создании вспомогательного инструмента на основе ИИ, заточенного под создание Pitch-Deck.
"""
🍀 ИДЕЯ: Основная идея кейса заключается в создании вспомогательного инструмента на основе ИИ, заточенного под
создание Pitch-Deck."""
names_prompt = """
По тексту ответь или предположи ответ на вопросы в следющем формате:
@ -45,11 +49,11 @@
"""
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
'awards': 'Когда проблема будет решена, какова будет ценность для ваших пользователей',
'money': 'На чем проект зарабатывает? сколько и за что ему платят клиенты',
'aims': Напиши 3 цели: на месяц, на полгода и год, формат: {'1': цель на месяц, '2': цель на полгода, '3': цель на год},
'investments_sold': 'На что потратить инвестиции под проект',
'financial_indicators': 'Напиши финансовые показатели проекта'
'awards': 'Когда проблема будет решена, какова будет ценность для ваших пользователей',
'money': 'На чем проект зарабатывает? сколько и за что ему платят клиенты',
'aims': Напиши 3 цели: на месяц, на полгода и год, формат: {'1': цель на месяц, '2': цель на полгода, '3': цель на год},
'investments_sold': 'На что потратить инвестиции под проект',
'financial_indicators': 'Напиши финансовые показатели проекта'
}
""",
"""

View File

@ -1,6 +1,7 @@
import pickle
from annoy import AnnoyIndex
from sentence_transformers import SentenceTransformer
import pickle
model = None
data = None

View File

@ -1,12 +1,12 @@
from django.db import models
from pitch_deck_generator.utils.files import user_file_upload_mixin
from pitch_deck_generator.utils.generators import generate_charset
from pitch_deck_generator.common.signals import (
create_cropped_model_image,
delete_cropped_model_image,
update_cropped_model_image,
)
from pitch_deck_generator.utils.files import user_file_upload_mixin
from pitch_deck_generator.utils.generators import generate_charset
class BaseImageModel(models.Model):

View File

@ -7,7 +7,7 @@ def create_cropped_model_image(sender, instance, created, **kwargs):
model = sender
if created:
if instance.image:
crop_model_image.apply_async(
kwargs={
"pk": instance.pk,
@ -16,7 +16,7 @@ def create_cropped_model_image(sender, instance, created, **kwargs):
},
countdown=2,
)
def update_cropped_model_image(sender, instance, **kwargs):
model = sender
@ -30,7 +30,7 @@ def update_cropped_model_image(sender, instance, **kwargs):
# run task to create new cropped image
if kwargs["update_fields"] != frozenset({"image_cropped"}) and instance:
if instance.image:
crop_model_image.apply_async(
kwargs={
"pk": instance.pk,
@ -39,7 +39,7 @@ def update_cropped_model_image(sender, instance, **kwargs):
},
countdown=2,
)
else:
instance.image_cropped = None

View File

@ -1,6 +1,6 @@
from django.contrib import admin
from pitch_deck_generator.decks.models import Question, PitchDeck
from pitch_deck_generator.decks.models import PitchDeck, Question
admin.site.register(PitchDeck)
admin.site.register(Question)

View File

@ -7,9 +7,9 @@
from pitch_deck_generator.decks.models import (
PitchDeck,
Question,
QuestionDeckHint,
QuestionAnswer,
QuestionAnswerPhoto,
QuestionDeckHint,
)

View File

@ -1,11 +1,12 @@
from django.urls import path
from pitch_deck_generator.decks.api.views import (
CreateQuestionAnswerApiView,
GetDeckQuestionApiView,
GetDeckQuestionHintApiView,
GetFirstQuestionApiView,
ListDecksApiView,
RetrievePitchApiView,
GetFirstQuestionApiView,
GetDeckQuestionApiView,
GetDeckQuestionHintApiView, CreateQuestionAnswerApiView,
)
app_name = "decks"
@ -15,6 +16,9 @@
path("<int:id>", RetrievePitchApiView.as_view()),
path("question/<int:deck_id>", GetFirstQuestionApiView.as_view()),
path("question/<int:deck_id>/<int:question_id>", GetDeckQuestionApiView.as_view()),
path("question/<int:deck_id>/<int:question_id>/", CreateQuestionAnswerApiView.as_view()),
path(
"question/<int:deck_id>/<int:question_id>/",
CreateQuestionAnswerApiView.as_view(),
),
path("hint/<int:deck_id>/<int:question_id>", GetDeckQuestionHintApiView.as_view()),
]

View File

@ -1,16 +1,16 @@
from rest_framework import generics, status
from rest_framework.generics import get_object_or_404
from rest_framework.parsers import FormParser, JSONParser, MultiPartParser
from rest_framework.response import Response
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
from pitch_deck_generator.decks.api.serializers import (
AnswerSerializer,
BasePitchDeckSerializer,
HintSerializer,
PitchDeckSerializer,
QuestionSerializer,
HintSerializer,
AnswerSerializer,
)
from pitch_deck_generator.decks.models import PitchDeck, QuestionDeckHint, Question
from pitch_deck_generator.decks.models import PitchDeck, Question, QuestionDeckHint
class ListDecksApiView(generics.ListCreateAPIView):

View File

@ -1,7 +1,7 @@
import requests
from celery import shared_task
from ml.openai_handle import create_name_hint, create_hints
from ml.openai_handle import create_hints, create_name_hint
from pitch_deck_generator.decks.models import PitchDeck, Question, QuestionDeckHint
data_types = {

View File

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@ -1,3 +0,0 @@
from django.shortcuts import render
# Create your views here.

View File

@ -1,5 +1,5 @@
from django.core.cache import cache
from django.db.models.signals import post_save, post_delete, pre_save
from django.db.models.signals import post_delete, post_save, pre_save
from django.dispatch import receiver
from pitch_deck_generator.tickets.models import Ticket

View File

@ -1 +0,0 @@

View File

@ -1,6 +1,6 @@
import os
from io import BytesIO
from PIL import Image
from pitch_deck_generator.users.models import User

12
poetry.lock generated
View File

@ -1428,18 +1428,18 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa
[[package]]
name = "isort"
version = "5.12.0"
version = "5.11.5"
description = "A Python utility / library to sort Python imports."
category = "main"
optional = false
python-versions = ">=3.8.0"
python-versions = ">=3.7.0"
files = [
{file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"},
{file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"},
{file = "isort-5.11.5-py3-none-any.whl", hash = "sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746"},
{file = "isort-5.11.5.tar.gz", hash = "sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db"},
]
[package.extras]
colors = ["colorama (>=0.4.3)"]
colors = ["colorama (>=0.4.3,<0.5.0)"]
pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"]
plugins = ["setuptools"]
requirements-deprecated-finder = ["pip-api", "pipreqs"]
@ -3298,4 +3298,4 @@ multidict = ">=4.0"
[metadata]
lock-version = "2.0"
python-versions = "^3.11"
content-hash = "981198feadb63083b31387f32ef93f2ded7098868fe9cd40a9e505a057cf9d1b"
content-hash = "31ce390d9b50a16455803f012bd6f7eca984fbec0d0e60404edaea07b5523792"

View File

@ -48,6 +48,7 @@ django-coverage-plugin = "^3.0.0"
pytest-django = "^4.5.2"
sentry-sdk = "^1.12.0"
openai = "^0.27.9"
isort = "5.11.5"
[build-system]