django-spire 0.16.12__py3-none-any.whl → 0.16.13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_spire/ai/admin.py +3 -1
- django_spire/ai/apps.py +2 -0
- django_spire/ai/chat/admin.py +15 -9
- django_spire/ai/chat/apps.py +4 -1
- django_spire/ai/chat/auth/controller.py +3 -1
- django_spire/ai/chat/choices.py +2 -0
- django_spire/ai/chat/intelligence/maps/intent_llm_map.py +8 -5
- django_spire/ai/chat/intelligence/prompts.py +4 -2
- django_spire/ai/chat/intelligence/workflows/chat_workflow.py +27 -28
- django_spire/ai/chat/message_intel.py +7 -4
- django_spire/ai/chat/models.py +8 -9
- django_spire/ai/chat/querysets.py +3 -1
- django_spire/ai/chat/responses.py +19 -10
- django_spire/ai/chat/tools.py +20 -15
- django_spire/ai/chat/urls/message_urls.py +2 -1
- django_spire/ai/chat/urls/page_urls.py +1 -0
- django_spire/ai/chat/views/message_request_views.py +2 -0
- django_spire/ai/chat/views/message_response_views.py +4 -4
- django_spire/ai/chat/views/message_views.py +2 -0
- django_spire/ai/chat/views/page_views.py +7 -2
- django_spire/ai/chat/views/template_views.py +2 -0
- django_spire/ai/decorators.py +13 -7
- django_spire/ai/mixins.py +4 -2
- django_spire/ai/models.py +7 -2
- django_spire/ai/prompt/bots.py +14 -32
- django_spire/ai/prompt/intel.py +1 -1
- django_spire/ai/prompt/prompts.py +7 -1
- django_spire/ai/prompt/system/bots.py +42 -75
- django_spire/ai/prompt/system/intel.py +5 -4
- django_spire/ai/prompt/system/prompts.py +5 -1
- django_spire/ai/prompt/system/system_prompt_cli.py +15 -9
- django_spire/ai/prompt/tests/test_bots.py +14 -11
- django_spire/ai/prompt/text_to_prompt_cli.py +5 -2
- django_spire/ai/prompt/tuning/bot_tuning_cli.py +14 -13
- django_spire/ai/prompt/tuning/bots.py +68 -116
- django_spire/ai/prompt/tuning/intel.py +1 -1
- django_spire/ai/prompt/tuning/mixins.py +2 -0
- django_spire/ai/prompt/tuning/prompt_tuning_cli.py +8 -8
- django_spire/ai/prompt/tuning/prompts.py +4 -2
- django_spire/ai/sms/admin.py +3 -1
- django_spire/ai/sms/apps.py +2 -0
- django_spire/ai/sms/decorators.py +2 -0
- django_spire/ai/sms/intel.py +4 -2
- django_spire/ai/sms/intelligence/workflows/sms_conversation_workflow.py +8 -8
- django_spire/ai/sms/models.py +16 -14
- django_spire/ai/sms/querysets.py +4 -1
- django_spire/ai/sms/tools.py +18 -16
- django_spire/ai/sms/urls.py +1 -1
- django_spire/ai/sms/views.py +2 -0
- django_spire/ai/tests/test_ai.py +3 -5
- django_spire/ai/urls.py +1 -0
- django_spire/consts.py +1 -1
- django_spire/contrib/seeding/field/django/seeder.py +6 -4
- django_spire/contrib/seeding/field/llm.py +1 -2
- django_spire/contrib/seeding/intelligence/bots/field_seeding_bots.py +7 -8
- django_spire/contrib/seeding/intelligence/bots/seeder_generator_bot.py +15 -16
- django_spire/contrib/seeding/intelligence/intel.py +1 -1
- django_spire/contrib/seeding/intelligence/prompts/factory.py +5 -7
- django_spire/contrib/seeding/intelligence/prompts/foreign_key_selection_prompt.py +3 -5
- django_spire/contrib/seeding/intelligence/prompts/generate_django_model_seeder_prompts.py +1 -2
- django_spire/contrib/seeding/intelligence/prompts/generic_relationship_selection_prompt.py +3 -5
- django_spire/contrib/seeding/intelligence/prompts/hierarchical_selection_prompt.py +1 -1
- django_spire/contrib/seeding/intelligence/prompts/model_field_choices_prompt.py +3 -3
- django_spire/contrib/seeding/intelligence/prompts/negation_prompt.py +1 -1
- django_spire/contrib/seeding/intelligence/prompts/objective_prompt.py +2 -4
- django_spire/contrib/seeding/management/commands/seeding.py +5 -2
- django_spire/contrib/seeding/model/base.py +12 -10
- django_spire/contrib/seeding/model/django/seeder.py +13 -10
- django_spire/contrib/seeding/tests/test_seeding.py +1 -1
- django_spire/knowledge/admin.py +2 -0
- django_spire/knowledge/apps.py +2 -0
- django_spire/knowledge/auth/controller.py +2 -0
- django_spire/knowledge/collection/admin.py +3 -0
- django_spire/knowledge/collection/forms.py +2 -0
- django_spire/knowledge/collection/models.py +4 -0
- django_spire/knowledge/collection/querysets.py +3 -3
- django_spire/knowledge/collection/seeding/seed.py +2 -0
- django_spire/knowledge/collection/tests/factories.py +2 -0
- django_spire/knowledge/collection/tests/test_services/test_transformation_service.py +2 -0
- django_spire/knowledge/collection/tests/test_urls/test_form_urls.py +2 -0
- django_spire/knowledge/collection/tests/test_urls/test_json_urls.py +2 -0
- django_spire/knowledge/collection/tests/test_urls/test_page_urls.py +2 -0
- django_spire/knowledge/collection/views/json_views.py +2 -0
- django_spire/knowledge/collection/views/page_views.py +2 -0
- django_spire/knowledge/context_processors.py +2 -0
- django_spire/knowledge/entry/services/tool_service.py +1 -0
- django_spire/knowledge/entry/services/transformation_services.py +0 -1
- django_spire/knowledge/entry/tests/factories.py +3 -0
- django_spire/knowledge/entry/tests/test_urls/test_form_urls.py +2 -0
- django_spire/knowledge/entry/tests/test_urls/test_json_urls.py +2 -0
- django_spire/knowledge/entry/tests/test_urls/test_page_urls.py +2 -0
- django_spire/knowledge/entry/urls/form_urls.py +1 -0
- django_spire/knowledge/entry/urls/json_urls.py +1 -0
- django_spire/knowledge/entry/urls/page_urls.py +1 -0
- django_spire/knowledge/entry/urls/template_urls.py +1 -0
- django_spire/knowledge/entry/version/admin.py +2 -0
- django_spire/knowledge/entry/version/block/admin.py +2 -0
- django_spire/knowledge/entry/version/block/blocks/heading_block.py +2 -0
- django_spire/knowledge/entry/version/block/blocks/sub_heading_block.py +2 -0
- django_spire/knowledge/entry/version/block/blocks/text_block.py +2 -0
- django_spire/knowledge/entry/version/block/maps.py +2 -0
- django_spire/knowledge/entry/version/block/models.py +2 -0
- django_spire/knowledge/entry/version/block/tests/factories.py +2 -0
- django_spire/knowledge/entry/version/block/tests/test_urls/test_json_urls.py +2 -0
- django_spire/knowledge/entry/version/block/views/json_views.py +2 -0
- django_spire/knowledge/entry/version/intelligence/bots/markdown_format_llm_bot.py +12 -9
- django_spire/knowledge/entry/version/maps.py +2 -0
- django_spire/knowledge/entry/version/models.py +2 -0
- django_spire/knowledge/entry/version/querysets.py +2 -0
- django_spire/knowledge/entry/version/seeding/seeder.py +1 -0
- django_spire/knowledge/entry/version/tests/factories.py +2 -0
- django_spire/knowledge/entry/version/tests/test_converters/test_docx_converter.py +3 -0
- django_spire/knowledge/entry/version/tests/test_urls/test_form_urls.py +2 -0
- django_spire/knowledge/entry/version/tests/test_urls/test_json_urls.py +2 -0
- django_spire/knowledge/entry/version/tests/test_urls/test_page_urls.py +2 -0
- django_spire/knowledge/entry/version/urls/form_urls.py +1 -0
- django_spire/knowledge/entry/version/urls/json_urls.py +1 -0
- django_spire/knowledge/entry/version/urls/page_urls.py +1 -0
- django_spire/knowledge/entry/version/urls/redirect_urls.py +1 -0
- django_spire/knowledge/entry/version/views/form_views.py +2 -0
- django_spire/knowledge/entry/version/views/json_views.py +2 -0
- django_spire/knowledge/entry/version/views/page_views.py +2 -0
- django_spire/knowledge/entry/version/views/redirect_views.py +2 -0
- django_spire/knowledge/exceptions.py +2 -0
- django_spire/knowledge/intelligence/bots/entry_search_llm_bot.py +5 -16
- django_spire/knowledge/intelligence/intel/collection_intel.py +3 -1
- django_spire/knowledge/intelligence/intel/entry_intel.py +3 -3
- django_spire/knowledge/intelligence/intel/message_intel.py +2 -0
- django_spire/knowledge/intelligence/maps/collection_map.py +9 -10
- django_spire/knowledge/intelligence/maps/entry_map.py +8 -9
- django_spire/knowledge/intelligence/workflows/knowledge_workflow.py +8 -6
- django_spire/knowledge/models.py +2 -0
- django_spire/knowledge/seeding/seed.py +2 -0
- django_spire/knowledge/templatetags/spire_knowledge_tags.py +3 -0
- django_spire/knowledge/urls/__init__.py +1 -0
- {django_spire-0.16.12.dist-info → django_spire-0.16.13.dist-info}/METADATA +5 -4
- {django_spire-0.16.12.dist-info → django_spire-0.16.13.dist-info}/RECORD +140 -140
- {django_spire-0.16.12.dist-info → django_spire-0.16.13.dist-info}/WHEEL +0 -0
- {django_spire-0.16.12.dist-info → django_spire-0.16.13.dist-info}/licenses/LICENSE.md +0 -0
- {django_spire-0.16.12.dist-info → django_spire-0.16.13.dist-info}/top_level.txt +0 -0
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from dandy import BaseIntel, Bot, Prompt
|
|
3
4
|
|
|
4
|
-
class MarkdownFormatLlmBot(BaseLlmBot):
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
class MarkdownTextIntel(BaseIntel):
|
|
7
|
+
text: str
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MarkdownFormatLlmBot(Bot):
|
|
11
|
+
llm_intel_class = MarkdownTextIntel
|
|
12
|
+
|
|
13
|
+
def process(self, markdown_content: str) -> str:
|
|
11
14
|
markdown_prompt = Prompt()
|
|
12
15
|
markdown_prompt.text(
|
|
13
16
|
'Can you improve the markdown formatting? Do NOT add or change any of the '
|
|
14
17
|
'content.'
|
|
15
18
|
)
|
|
16
|
-
markdown_prompt.line_break()
|
|
17
19
|
markdown_prompt.text(markdown_content)
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
result = self.llm.prompt_to_intel(prompt=markdown_prompt)
|
|
22
|
+
return result.text
|
|
@@ -1,30 +1,19 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dandy
|
|
3
|
+
from dandy import Bot, Prompt
|
|
4
4
|
|
|
5
5
|
from django_spire.knowledge.entry.models import Entry
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class EntrySearchLlmBot(
|
|
8
|
+
class EntrySearchLlmBot(Bot):
|
|
9
9
|
@classmethod
|
|
10
|
-
def process(
|
|
11
|
-
cls,
|
|
12
|
-
user_input: str,
|
|
13
|
-
entry: Entry
|
|
14
|
-
) -> str:
|
|
10
|
+
def process(cls, user_input: str, entry: Entry) -> str:
|
|
15
11
|
entry_prompt = Prompt()
|
|
16
|
-
|
|
17
12
|
entry_prompt.text('You are a helpful assistant that helps users find information about entries.')
|
|
18
|
-
|
|
19
13
|
entry_prompt.text(f'User Input: {user_input}')
|
|
20
|
-
|
|
21
14
|
entry_prompt.text(f'Entry: {entry.name}')
|
|
22
15
|
|
|
23
16
|
for version_block in entry.current_version.blocks.all():
|
|
24
17
|
entry_prompt.text(version_block.render_to_text())
|
|
25
18
|
|
|
26
|
-
|
|
27
|
-
prompt=entry_prompt
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
return result_intel.text
|
|
19
|
+
return cls().llm.prompt_to_text(prompt=entry_prompt)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dandy
|
|
3
|
+
from dandy import BaseIntel, BaseListIntel
|
|
4
4
|
|
|
5
5
|
from django_spire.knowledge.intelligence.intel.collection_intel import CollectionIntel
|
|
6
6
|
|
|
@@ -11,4 +11,4 @@ class EntryIntel(BaseIntel):
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class EntriesIntel(BaseListIntel[EntryIntel]):
|
|
14
|
-
entry_intel_list:
|
|
14
|
+
entry_intel_list: list[EntryIntel]
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dandy
|
|
4
|
-
from dandy.map import Map
|
|
3
|
+
from dandy import Decoder
|
|
5
4
|
|
|
6
5
|
from django_spire.knowledge.collection.models import Collection
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
def get_collection_map_class() ->
|
|
10
|
-
class CollectionMap(
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
def get_collection_map_class() -> type[Decoder]:
|
|
9
|
+
class CollectionMap(Decoder):
|
|
10
|
+
mapping_keys_description = 'Knowledge Collection Titles'
|
|
11
|
+
mapping = {
|
|
13
12
|
**{
|
|
14
13
|
collection.name: collection
|
|
15
14
|
for collection in Collection.objects.all().annotate_entry_count()
|
|
16
15
|
},
|
|
17
|
-
|
|
18
|
-
}
|
|
16
|
+
'No Matching Knowledge Collection Titles': None
|
|
17
|
+
}
|
|
19
18
|
|
|
20
|
-
return CollectionMap
|
|
19
|
+
return CollectionMap
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dandy
|
|
4
|
-
from dandy.map import Map
|
|
3
|
+
from dandy import Decoder
|
|
5
4
|
|
|
6
5
|
from django_spire.knowledge.collection.models import Collection
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
def get_entry_map_class(collection: Collection) ->
|
|
10
|
-
class EntryMap(
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
def get_entry_map_class(collection: Collection) -> type[Decoder]:
|
|
9
|
+
class EntryMap(Decoder):
|
|
10
|
+
mapping_keys_description = 'Knowledge Entries'
|
|
11
|
+
mapping = {
|
|
13
12
|
**{
|
|
14
13
|
entry.name: entry
|
|
15
14
|
for entry in collection.entries.all()
|
|
16
15
|
},
|
|
17
|
-
|
|
18
|
-
}
|
|
16
|
+
'No Matching Knowledge Entries': None
|
|
17
|
+
}
|
|
19
18
|
|
|
20
19
|
return EntryMap
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from django_spire.knowledge.intelligence.bots.entry_search_llm_bot import EntrySearchLlmBot
|
|
4
4
|
from django_spire.knowledge.intelligence.intel.collection_intel import CollectionIntel
|
|
5
5
|
from django_spire.knowledge.intelligence.intel.entry_intel import EntriesIntel, EntryIntel
|
|
6
|
-
from django_spire.knowledge.intelligence.maps.collection_map import get_collection_map_class
|
|
7
6
|
from django_spire.knowledge.intelligence.intel.message_intel import KnowledgeMessageIntel
|
|
7
|
+
from django_spire.knowledge.intelligence.maps.collection_map import get_collection_map_class
|
|
8
8
|
from django_spire.knowledge.intelligence.maps.entry_map import get_entry_map_class
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
class KnowledgeWorkflow
|
|
11
|
+
class KnowledgeWorkflow:
|
|
12
12
|
@classmethod
|
|
13
13
|
def process(cls, user_input: str) -> KnowledgeMessageIntel:
|
|
14
14
|
CollectionMap = get_collection_map_class()
|
|
15
|
-
collections = CollectionMap.process(user_input)
|
|
15
|
+
collections = CollectionMap().process(user_input).values
|
|
16
16
|
|
|
17
17
|
if collections[0] is None:
|
|
18
18
|
return KnowledgeMessageIntel(
|
|
@@ -26,7 +26,7 @@ class KnowledgeWorkflow(BaseWorkflow):
|
|
|
26
26
|
for collection in collections:
|
|
27
27
|
if collection.entry_count > 0:
|
|
28
28
|
EntryMap = get_entry_map_class(collection=collection)
|
|
29
|
-
entries.extend(EntryMap.process(user_input))
|
|
29
|
+
entries.extend(EntryMap().process(user_input).values)
|
|
30
30
|
|
|
31
31
|
entries = [entry for entry in entries if entry is not None]
|
|
32
32
|
|
|
@@ -38,10 +38,12 @@ class KnowledgeWorkflow(BaseWorkflow):
|
|
|
38
38
|
)
|
|
39
39
|
)
|
|
40
40
|
|
|
41
|
+
entry_search_bot = EntrySearchLlmBot()
|
|
42
|
+
|
|
41
43
|
entries_intel = EntriesIntel(
|
|
42
44
|
entry_intel_list=[
|
|
43
45
|
EntryIntel(
|
|
44
|
-
body=
|
|
46
|
+
body=entry_search_bot.process(
|
|
45
47
|
user_input=user_input,
|
|
46
48
|
entry=entry
|
|
47
49
|
),
|
django_spire/knowledge/models.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-spire
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.13
|
|
4
4
|
Summary: A project for Django Spire
|
|
5
5
|
Author-email: Brayden Carlson <braydenc@stratusadv.com>, Nathan Johnson <nathanj@stratusadv.com>
|
|
6
6
|
License: Copyright (c) 2024 Stratus Advanced Technologies and Contributors.
|
|
@@ -45,10 +45,10 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
45
45
|
Requires-Python: >=3.11
|
|
46
46
|
Description-Content-Type: text/markdown
|
|
47
47
|
License-File: LICENSE.md
|
|
48
|
-
Requires-Dist: boto3
|
|
49
|
-
Requires-Dist: botocore
|
|
48
|
+
Requires-Dist: boto3>=1.34.0
|
|
49
|
+
Requires-Dist: botocore>=1.34.0
|
|
50
50
|
Requires-Dist: crispy-bootstrap5==2024.10
|
|
51
|
-
Requires-Dist: dandy==
|
|
51
|
+
Requires-Dist: dandy==1.1.0
|
|
52
52
|
Requires-Dist: django>=5.1.8
|
|
53
53
|
Requires-Dist: django-crispy-forms==2.3
|
|
54
54
|
Requires-Dist: django-glue>=0.8.1
|
|
@@ -73,6 +73,7 @@ Requires-Dist: django-debug-toolbar; extra == "development"
|
|
|
73
73
|
Requires-Dist: django-watchfiles; extra == "development"
|
|
74
74
|
Requires-Dist: pip; extra == "development"
|
|
75
75
|
Requires-Dist: pyinstrument; extra == "development"
|
|
76
|
+
Requires-Dist: pyrefly; extra == "development"
|
|
76
77
|
Requires-Dist: pytest; extra == "development"
|
|
77
78
|
Requires-Dist: setuptools; extra == "development"
|
|
78
79
|
Requires-Dist: twine; extra == "development"
|