Commit
•
9052a89
1
Parent(s):
4f8f050
let's use Zephyr 7b for storytelling
Browse files- .env +3 -2
- package-lock.json +53 -53
- package.json +1 -1
- src/app/engine/presets.ts +9 -5
- src/app/engine/render.ts +2 -0
- src/app/queries/getStory.ts +6 -6
- src/app/queries/predictWithHuggingFace.ts +11 -0
- src/lib/createLlamaPrompt.ts +1 -1
- src/lib/createZephyrPrompt.ts +27 -0
.env
CHANGED
@@ -63,13 +63,14 @@ RENDERING_OPENAI_API_MODEL="dall-e-3"
|
|
63 |
|
64 |
# If you decided to use OpenAI for the LLM engine
|
65 |
LLM_OPENAI_API_BASE_URL="https://api.openai.com/v1"
|
66 |
-
LLM_OPENAI_API_MODEL="gpt-
|
67 |
|
68 |
# If you decided to use a private Hugging Face Inference Endpoint for the LLM engine
|
69 |
LLM_HF_INFERENCE_ENDPOINT_URL=""
|
70 |
|
71 |
# If you decided to use a Hugging Face Inference API model for the LLM engine
|
72 |
-
LLM_HF_INFERENCE_API_MODEL="meta-llama/Llama-2-70b-chat-hf"
|
|
|
73 |
|
74 |
# ----------- COMMUNITY SHARING (OPTIONAL) -----------
|
75 |
# You don't need those community sharing options to run the AI Comic Factory
|
|
|
63 |
|
64 |
# If you decided to use OpenAI for the LLM engine
|
65 |
LLM_OPENAI_API_BASE_URL="https://api.openai.com/v1"
|
66 |
+
LLM_OPENAI_API_MODEL="gpt-4"
|
67 |
|
68 |
# If you decided to use a private Hugging Face Inference Endpoint for the LLM engine
|
69 |
LLM_HF_INFERENCE_ENDPOINT_URL=""
|
70 |
|
71 |
# If you decided to use a Hugging Face Inference API model for the LLM engine
|
72 |
+
# LLM_HF_INFERENCE_API_MODEL="meta-llama/Llama-2-70b-chat-hf"
|
73 |
+
LLM_HF_INFERENCE_API_MODEL="HuggingFaceH4/zephyr-7b-beta"
|
74 |
|
75 |
# ----------- COMMUNITY SHARING (OPTIONAL) -----------
|
76 |
# You don't need those community sharing options to run the AI Comic Factory
|
package-lock.json
CHANGED
@@ -43,7 +43,7 @@
|
|
43 |
"konva": "^9.2.2",
|
44 |
"lucide-react": "^0.260.0",
|
45 |
"next": "13.4.10",
|
46 |
-
"openai": "^4.
|
47 |
"pick": "^0.0.1",
|
48 |
"postcss": "8.4.26",
|
49 |
"react": "18.2.0",
|
@@ -192,9 +192,9 @@
|
|
192 |
}
|
193 |
},
|
194 |
"node_modules/@floating-ui/react-dom": {
|
195 |
-
"version": "2.0.
|
196 |
-
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.
|
197 |
-
"integrity": "sha512-
|
198 |
"dependencies": {
|
199 |
"@floating-ui/dom": "^1.5.1"
|
200 |
},
|
@@ -1651,23 +1651,23 @@
|
|
1651 |
"integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw=="
|
1652 |
},
|
1653 |
"node_modules/@types/node-fetch": {
|
1654 |
-
"version": "2.6.
|
1655 |
-
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.
|
1656 |
-
"integrity": "sha512-
|
1657 |
"dependencies": {
|
1658 |
"@types/node": "*",
|
1659 |
"form-data": "^4.0.0"
|
1660 |
}
|
1661 |
},
|
1662 |
"node_modules/@types/prop-types": {
|
1663 |
-
"version": "15.7.
|
1664 |
-
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.
|
1665 |
-
"integrity": "sha512-
|
1666 |
},
|
1667 |
"node_modules/@types/qs": {
|
1668 |
-
"version": "6.9.
|
1669 |
-
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.
|
1670 |
-
"integrity": "sha512-
|
1671 |
"dev": true
|
1672 |
},
|
1673 |
"node_modules/@types/react": {
|
@@ -1689,17 +1689,17 @@
|
|
1689 |
}
|
1690 |
},
|
1691 |
"node_modules/@types/react-reconciler": {
|
1692 |
-
"version": "0.28.
|
1693 |
-
"resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.
|
1694 |
-
"integrity": "sha512-
|
1695 |
"dependencies": {
|
1696 |
"@types/react": "*"
|
1697 |
}
|
1698 |
},
|
1699 |
"node_modules/@types/react-virtualized": {
|
1700 |
-
"version": "9.21.
|
1701 |
-
"resolved": "https://registry.npmjs.org/@types/react-virtualized/-/react-virtualized-9.21.
|
1702 |
-
"integrity": "sha512-
|
1703 |
"dev": true,
|
1704 |
"dependencies": {
|
1705 |
"@types/prop-types": "*",
|
@@ -1707,20 +1707,20 @@
|
|
1707 |
}
|
1708 |
},
|
1709 |
"node_modules/@types/sbd": {
|
1710 |
-
"version": "1.0.
|
1711 |
-
"resolved": "https://registry.npmjs.org/@types/sbd/-/sbd-1.0.
|
1712 |
-
"integrity": "sha512-
|
1713 |
"dev": true
|
1714 |
},
|
1715 |
"node_modules/@types/scheduler": {
|
1716 |
-
"version": "0.16.
|
1717 |
-
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.
|
1718 |
-
"integrity": "sha512-
|
1719 |
},
|
1720 |
"node_modules/@types/uuid": {
|
1721 |
-
"version": "9.0.
|
1722 |
-
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.
|
1723 |
-
"integrity": "sha512-
|
1724 |
},
|
1725 |
"node_modules/@typescript-eslint/parser": {
|
1726 |
"version": "5.62.0",
|
@@ -2324,9 +2324,9 @@
|
|
2324 |
}
|
2325 |
},
|
2326 |
"node_modules/caniuse-lite": {
|
2327 |
-
"version": "1.0.
|
2328 |
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
2329 |
-
"integrity": "sha512-
|
2330 |
"funding": [
|
2331 |
{
|
2332 |
"type": "opencollective",
|
@@ -2770,9 +2770,9 @@
|
|
2770 |
}
|
2771 |
},
|
2772 |
"node_modules/cookies-next/node_modules/@types/node": {
|
2773 |
-
"version": "16.18.
|
2774 |
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.
|
2775 |
-
"integrity": "sha512-
|
2776 |
},
|
2777 |
"node_modules/create-require": {
|
2778 |
"version": "1.1.1",
|
@@ -3054,9 +3054,9 @@
|
|
3054 |
}
|
3055 |
},
|
3056 |
"node_modules/electron-to-chromium": {
|
3057 |
-
"version": "1.4.
|
3058 |
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.
|
3059 |
-
"integrity": "sha512
|
3060 |
},
|
3061 |
"node_modules/emoji-regex": {
|
3062 |
"version": "9.2.2",
|
@@ -3724,16 +3724,16 @@
|
|
3724 |
}
|
3725 |
},
|
3726 |
"node_modules/flat-cache": {
|
3727 |
-
"version": "3.
|
3728 |
-
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.
|
3729 |
-
"integrity": "sha512
|
3730 |
"dependencies": {
|
3731 |
"flatted": "^3.2.9",
|
3732 |
"keyv": "^4.5.3",
|
3733 |
"rimraf": "^3.0.2"
|
3734 |
},
|
3735 |
"engines": {
|
3736 |
-
"node": ">=12.0.0"
|
3737 |
}
|
3738 |
},
|
3739 |
"node_modules/flatted": {
|
@@ -5160,9 +5160,9 @@
|
|
5160 |
}
|
5161 |
},
|
5162 |
"node_modules/openai": {
|
5163 |
-
"version": "4.
|
5164 |
-
"resolved": "https://registry.npmjs.org/openai/-/openai-4.
|
5165 |
-
"integrity": "sha512-
|
5166 |
"dependencies": {
|
5167 |
"@types/node": "^18.11.18",
|
5168 |
"@types/node-fetch": "^2.6.4",
|
@@ -5179,9 +5179,9 @@
|
|
5179 |
}
|
5180 |
},
|
5181 |
"node_modules/openai/node_modules/@types/node": {
|
5182 |
-
"version": "18.18.
|
5183 |
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.
|
5184 |
-
"integrity": "sha512-
|
5185 |
"dependencies": {
|
5186 |
"undici-types": "~5.26.4"
|
5187 |
}
|
@@ -5644,9 +5644,9 @@
|
|
5644 |
}
|
5645 |
},
|
5646 |
"node_modules/react-icons": {
|
5647 |
-
"version": "4.
|
5648 |
-
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.
|
5649 |
-
"integrity": "sha512-
|
5650 |
"peerDependencies": {
|
5651 |
"react": "*"
|
5652 |
}
|
@@ -6191,9 +6191,9 @@
|
|
6191 |
}
|
6192 |
},
|
6193 |
"node_modules/streamx": {
|
6194 |
-
"version": "2.15.
|
6195 |
-
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.
|
6196 |
-
"integrity": "sha512-
|
6197 |
"dependencies": {
|
6198 |
"fast-fifo": "^1.1.0",
|
6199 |
"queue-tick": "^1.0.1"
|
|
|
43 |
"konva": "^9.2.2",
|
44 |
"lucide-react": "^0.260.0",
|
45 |
"next": "13.4.10",
|
46 |
+
"openai": "^4.17.5",
|
47 |
"pick": "^0.0.1",
|
48 |
"postcss": "8.4.26",
|
49 |
"react": "18.2.0",
|
|
|
192 |
}
|
193 |
},
|
194 |
"node_modules/@floating-ui/react-dom": {
|
195 |
+
"version": "2.0.4",
|
196 |
+
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz",
|
197 |
+
"integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==",
|
198 |
"dependencies": {
|
199 |
"@floating-ui/dom": "^1.5.1"
|
200 |
},
|
|
|
1651 |
"integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw=="
|
1652 |
},
|
1653 |
"node_modules/@types/node-fetch": {
|
1654 |
+
"version": "2.6.9",
|
1655 |
+
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz",
|
1656 |
+
"integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==",
|
1657 |
"dependencies": {
|
1658 |
"@types/node": "*",
|
1659 |
"form-data": "^4.0.0"
|
1660 |
}
|
1661 |
},
|
1662 |
"node_modules/@types/prop-types": {
|
1663 |
+
"version": "15.7.10",
|
1664 |
+
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz",
|
1665 |
+
"integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A=="
|
1666 |
},
|
1667 |
"node_modules/@types/qs": {
|
1668 |
+
"version": "6.9.10",
|
1669 |
+
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
|
1670 |
+
"integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==",
|
1671 |
"dev": true
|
1672 |
},
|
1673 |
"node_modules/@types/react": {
|
|
|
1689 |
}
|
1690 |
},
|
1691 |
"node_modules/@types/react-reconciler": {
|
1692 |
+
"version": "0.28.8",
|
1693 |
+
"resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz",
|
1694 |
+
"integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==",
|
1695 |
"dependencies": {
|
1696 |
"@types/react": "*"
|
1697 |
}
|
1698 |
},
|
1699 |
"node_modules/@types/react-virtualized": {
|
1700 |
+
"version": "9.21.27",
|
1701 |
+
"resolved": "https://registry.npmjs.org/@types/react-virtualized/-/react-virtualized-9.21.27.tgz",
|
1702 |
+
"integrity": "sha512-DVAmqFXw4vKXLYHBMJKKt8+0t+O550uV2KT81aXRSztj7ieBSxIXL1X1cupwReb3Oux1RUfvmhEcRB2Jr6Z0Yw==",
|
1703 |
"dev": true,
|
1704 |
"dependencies": {
|
1705 |
"@types/prop-types": "*",
|
|
|
1707 |
}
|
1708 |
},
|
1709 |
"node_modules/@types/sbd": {
|
1710 |
+
"version": "1.0.5",
|
1711 |
+
"resolved": "https://registry.npmjs.org/@types/sbd/-/sbd-1.0.5.tgz",
|
1712 |
+
"integrity": "sha512-60PxBBWhg0C3yb5bTP+wwWYGTKMcuB0S6mTEa1sedMC79tYY0Ei7YjU4qsWzGn++lWscLQde16SnElJrf5/aTw==",
|
1713 |
"dev": true
|
1714 |
},
|
1715 |
"node_modules/@types/scheduler": {
|
1716 |
+
"version": "0.16.6",
|
1717 |
+
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz",
|
1718 |
+
"integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA=="
|
1719 |
},
|
1720 |
"node_modules/@types/uuid": {
|
1721 |
+
"version": "9.0.7",
|
1722 |
+
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz",
|
1723 |
+
"integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g=="
|
1724 |
},
|
1725 |
"node_modules/@typescript-eslint/parser": {
|
1726 |
"version": "5.62.0",
|
|
|
2324 |
}
|
2325 |
},
|
2326 |
"node_modules/caniuse-lite": {
|
2327 |
+
"version": "1.0.30001562",
|
2328 |
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz",
|
2329 |
+
"integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==",
|
2330 |
"funding": [
|
2331 |
{
|
2332 |
"type": "opencollective",
|
|
|
2770 |
}
|
2771 |
},
|
2772 |
"node_modules/cookies-next/node_modules/@types/node": {
|
2773 |
+
"version": "16.18.61",
|
2774 |
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.61.tgz",
|
2775 |
+
"integrity": "sha512-k0N7BqGhJoJzdh6MuQg1V1ragJiXTh8VUBAZTWjJ9cUq23SG0F0xavOwZbhiP4J3y20xd6jxKx+xNUhkMAi76Q=="
|
2776 |
},
|
2777 |
"node_modules/create-require": {
|
2778 |
"version": "1.1.1",
|
|
|
3054 |
}
|
3055 |
},
|
3056 |
"node_modules/electron-to-chromium": {
|
3057 |
+
"version": "1.4.582",
|
3058 |
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz",
|
3059 |
+
"integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA=="
|
3060 |
},
|
3061 |
"node_modules/emoji-regex": {
|
3062 |
"version": "9.2.2",
|
|
|
3724 |
}
|
3725 |
},
|
3726 |
"node_modules/flat-cache": {
|
3727 |
+
"version": "3.2.0",
|
3728 |
+
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
|
3729 |
+
"integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
|
3730 |
"dependencies": {
|
3731 |
"flatted": "^3.2.9",
|
3732 |
"keyv": "^4.5.3",
|
3733 |
"rimraf": "^3.0.2"
|
3734 |
},
|
3735 |
"engines": {
|
3736 |
+
"node": "^10.12.0 || >=12.0.0"
|
3737 |
}
|
3738 |
},
|
3739 |
"node_modules/flatted": {
|
|
|
5160 |
}
|
5161 |
},
|
5162 |
"node_modules/openai": {
|
5163 |
+
"version": "4.17.5",
|
5164 |
+
"resolved": "https://registry.npmjs.org/openai/-/openai-4.17.5.tgz",
|
5165 |
+
"integrity": "sha512-SDgA933/QOjISCgWRc/JQhY1HweYZ6FOie3bWrCpj09FA5xIlaomldbyzICHNjtkh7SWEmGYFjRHIDtuwr+eTw==",
|
5166 |
"dependencies": {
|
5167 |
"@types/node": "^18.11.18",
|
5168 |
"@types/node-fetch": "^2.6.4",
|
|
|
5179 |
}
|
5180 |
},
|
5181 |
"node_modules/openai/node_modules/@types/node": {
|
5182 |
+
"version": "18.18.9",
|
5183 |
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz",
|
5184 |
+
"integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==",
|
5185 |
"dependencies": {
|
5186 |
"undici-types": "~5.26.4"
|
5187 |
}
|
|
|
5644 |
}
|
5645 |
},
|
5646 |
"node_modules/react-icons": {
|
5647 |
+
"version": "4.12.0",
|
5648 |
+
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz",
|
5649 |
+
"integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==",
|
5650 |
"peerDependencies": {
|
5651 |
"react": "*"
|
5652 |
}
|
|
|
6191 |
}
|
6192 |
},
|
6193 |
"node_modules/streamx": {
|
6194 |
+
"version": "2.15.5",
|
6195 |
+
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz",
|
6196 |
+
"integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==",
|
6197 |
"dependencies": {
|
6198 |
"fast-fifo": "^1.1.0",
|
6199 |
"queue-tick": "^1.0.1"
|
package.json
CHANGED
@@ -44,7 +44,7 @@
|
|
44 |
"konva": "^9.2.2",
|
45 |
"lucide-react": "^0.260.0",
|
46 |
"next": "13.4.10",
|
47 |
-
"openai": "^4.
|
48 |
"pick": "^0.0.1",
|
49 |
"postcss": "8.4.26",
|
50 |
"react": "18.2.0",
|
|
|
44 |
"konva": "^9.2.2",
|
45 |
"lucide-react": "^0.260.0",
|
46 |
"next": "13.4.10",
|
47 |
+
"openai": "^4.17.5",
|
48 |
"pick": "^0.0.1",
|
49 |
"postcss": "8.4.26",
|
50 |
"react": "18.2.0",
|
src/app/engine/presets.ts
CHANGED
@@ -115,7 +115,7 @@ export const presets: Record<string, Preset> = {
|
|
115 |
imagePrompt: (prompt: string) => [
|
116 |
"bande dessinée",
|
117 |
"franco-belgian comic",
|
118 |
-
|
119 |
"comic album",
|
120 |
"detailed drawing"
|
121 |
// "color drawing"
|
@@ -140,7 +140,8 @@ export const presets: Record<string, Preset> = {
|
|
140 |
llmPrompt: "american comic",
|
141 |
imagePrompt: (prompt: string) => [
|
142 |
"digital color comicbook style",
|
143 |
-
`modern american comic
|
|
|
144 |
"detailed drawing"
|
145 |
//"single panel",
|
146 |
// "2010s",
|
@@ -169,7 +170,8 @@ export const presets: Record<string, Preset> = {
|
|
169 |
font: "actionman",
|
170 |
llmPrompt: "american comic",
|
171 |
imagePrompt: (prompt: string) => [
|
172 |
-
`american comic
|
|
|
173 |
"single panel",
|
174 |
"american comic",
|
175 |
"comicbook style",
|
@@ -201,7 +203,8 @@ export const presets: Record<string, Preset> = {
|
|
201 |
imagePrompt: (prompt: string) => [
|
202 |
"1950",
|
203 |
"50s",
|
204 |
-
`vintage american color comic
|
|
|
205 |
"detailed drawing"
|
206 |
// "single panel",
|
207 |
// "comicbook style",
|
@@ -228,7 +231,8 @@ export const presets: Record<string, Preset> = {
|
|
228 |
font: "actionman",
|
229 |
llmPrompt: "american comic",
|
230 |
imagePrompt: (prompt: string) => [
|
231 |
-
`american comic
|
|
|
232 |
"single panel",
|
233 |
"american comic",
|
234 |
"comicbook style",
|
|
|
115 |
imagePrompt: (prompt: string) => [
|
116 |
"bande dessinée",
|
117 |
"franco-belgian comic",
|
118 |
+
prompt,
|
119 |
"comic album",
|
120 |
"detailed drawing"
|
121 |
// "color drawing"
|
|
|
140 |
llmPrompt: "american comic",
|
141 |
imagePrompt: (prompt: string) => [
|
142 |
"digital color comicbook style",
|
143 |
+
`modern american comic`,
|
144 |
+
prompt,
|
145 |
"detailed drawing"
|
146 |
//"single panel",
|
147 |
// "2010s",
|
|
|
170 |
font: "actionman",
|
171 |
llmPrompt: "american comic",
|
172 |
imagePrompt: (prompt: string) => [
|
173 |
+
`american comic`,
|
174 |
+
prompt,
|
175 |
"single panel",
|
176 |
"american comic",
|
177 |
"comicbook style",
|
|
|
203 |
imagePrompt: (prompt: string) => [
|
204 |
"1950",
|
205 |
"50s",
|
206 |
+
`vintage american color comic`,
|
207 |
+
prompt,
|
208 |
"detailed drawing"
|
209 |
// "single panel",
|
210 |
// "comicbook style",
|
|
|
231 |
font: "actionman",
|
232 |
llmPrompt: "american comic",
|
233 |
imagePrompt: (prompt: string) => [
|
234 |
+
`american comic`,
|
235 |
+
prompt,
|
236 |
"single panel",
|
237 |
"american comic",
|
238 |
"comicbook style",
|
src/app/engine/render.ts
CHANGED
@@ -353,6 +353,7 @@ export async function newRender({
|
|
353 |
segments: []
|
354 |
} as RenderedScene
|
355 |
} else {
|
|
|
356 |
console.log("sending:", {
|
357 |
prompt,
|
358 |
// negativePrompt, unused for now
|
@@ -376,6 +377,7 @@ export async function newRender({
|
|
376 |
|
377 |
cache: "ignore"
|
378 |
})
|
|
|
379 |
const res = await fetch(`${videochainApiUrl}${videochainApiUrl.endsWith("/") ? "" : "/"}render`, {
|
380 |
method: "POST",
|
381 |
headers: {
|
|
|
353 |
segments: []
|
354 |
} as RenderedScene
|
355 |
} else {
|
356 |
+
/*
|
357 |
console.log("sending:", {
|
358 |
prompt,
|
359 |
// negativePrompt, unused for now
|
|
|
377 |
|
378 |
cache: "ignore"
|
379 |
})
|
380 |
+
*/
|
381 |
const res = await fetch(`${videochainApiUrl}${videochainApiUrl.endsWith("/") ? "" : "/"}render`, {
|
382 |
method: "POST",
|
383 |
headers: {
|
src/app/queries/getStory.ts
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
-
|
2 |
-
import { dirtyLLMResponseCleaner } from "@/lib/dirtyLLMResponseCleaner"
|
3 |
import { dirtyLLMJsonParser } from "@/lib/dirtyLLMJsonParser"
|
4 |
import { dirtyCaptionCleaner } from "@/lib/dirtyCaptionCleaner"
|
5 |
|
@@ -7,6 +6,7 @@ import { predict } from "./predict"
|
|
7 |
import { Preset } from "../engine/presets"
|
8 |
import { LLMResponse } from "@/types"
|
9 |
import { cleanJson } from "@/lib/cleanJson"
|
|
|
10 |
|
11 |
export const getStory = async ({
|
12 |
preset,
|
@@ -22,22 +22,22 @@ export const getStory = async ({
|
|
22 |
// In case you need to quickly debug the RENDERING engine you can uncomment this:
|
23 |
// return mockLLMResponse
|
24 |
|
25 |
-
const query =
|
26 |
{
|
27 |
role: "system",
|
28 |
content: [
|
29 |
`You are a writer specialized in ${preset.llmPrompt}`,
|
30 |
-
`Please write detailed drawing instructions and a short (
|
31 |
`Give your response as a VALID JSON array like this: \`Array<{ panel: number; instructions: string; caption: string}>\`.`,
|
32 |
// `Give your response as Markdown bullet points.`,
|
33 |
-
`Be brief in your ${nbTotalPanels} instructions and narrative captions, don't add your own comments. Be straight to the point, and never reply things like "Sure, I can.." etc. Reply using valid JSON.`
|
34 |
].filter(item => item).join("\n")
|
35 |
},
|
36 |
{
|
37 |
role: "user",
|
38 |
content: `The story is: ${prompt}`,
|
39 |
}
|
40 |
-
]) + "
|
41 |
|
42 |
|
43 |
let result = ""
|
|
|
1 |
+
|
|
|
2 |
import { dirtyLLMJsonParser } from "@/lib/dirtyLLMJsonParser"
|
3 |
import { dirtyCaptionCleaner } from "@/lib/dirtyCaptionCleaner"
|
4 |
|
|
|
6 |
import { Preset } from "../engine/presets"
|
7 |
import { LLMResponse } from "@/types"
|
8 |
import { cleanJson } from "@/lib/cleanJson"
|
9 |
+
import { createZephyrPrompt } from "@/lib/createZephyrPrompt"
|
10 |
|
11 |
export const getStory = async ({
|
12 |
preset,
|
|
|
22 |
// In case you need to quickly debug the RENDERING engine you can uncomment this:
|
23 |
// return mockLLMResponse
|
24 |
|
25 |
+
const query = createZephyrPrompt([
|
26 |
{
|
27 |
role: "system",
|
28 |
content: [
|
29 |
`You are a writer specialized in ${preset.llmPrompt}`,
|
30 |
+
`Please write detailed drawing instructions and a short (2-3 sentences long) speech caption for the ${nbTotalPanels} panels of a new story. Please make sure each of the ${nbTotalPanels} panels include info about character gender, age, origin, clothes, colors, location, lights, etc.`,
|
31 |
`Give your response as a VALID JSON array like this: \`Array<{ panel: number; instructions: string; caption: string}>\`.`,
|
32 |
// `Give your response as Markdown bullet points.`,
|
33 |
+
`Be brief in your ${nbTotalPanels} instructions and narrative captions, don't add your own comments. The whole story must be captivating, smart, entertaining. Be straight to the point, and never reply things like "Sure, I can.." etc. Reply using valid JSON.`
|
34 |
].filter(item => item).join("\n")
|
35 |
},
|
36 |
{
|
37 |
role: "user",
|
38 |
content: `The story is: ${prompt}`,
|
39 |
}
|
40 |
+
]) + "[{"
|
41 |
|
42 |
|
43 |
let result = ""
|
src/app/queries/predictWithHuggingFace.ts
CHANGED
@@ -62,11 +62,16 @@ export async function predict(inputs: string, nbPanels: number): Promise<string>
|
|
62 |
if (
|
63 |
instructions.includes("</s>") ||
|
64 |
instructions.includes("<s>") ||
|
|
|
65 |
instructions.includes("[INST]") ||
|
66 |
instructions.includes("[/INST]") ||
|
67 |
instructions.includes("<SYS>") ||
|
|
|
68 |
instructions.includes("</SYS>") ||
|
|
|
|
|
69 |
instructions.includes("<|end|>") ||
|
|
|
70 |
instructions.includes("<|assistant|>")
|
71 |
) {
|
72 |
break
|
@@ -87,10 +92,16 @@ export async function predict(inputs: string, nbPanels: number): Promise<string>
|
|
87 |
.replaceAll("<|end|>", "")
|
88 |
.replaceAll("<s>", "")
|
89 |
.replaceAll("</s>", "")
|
|
|
90 |
.replaceAll("[INST]", "")
|
91 |
.replaceAll("[/INST]", "")
|
92 |
.replaceAll("<SYS>", "")
|
|
|
93 |
.replaceAll("</SYS>", "")
|
|
|
|
|
|
|
|
|
94 |
.replaceAll("<|assistant|>", "")
|
95 |
.replaceAll('""', '"')
|
96 |
)
|
|
|
62 |
if (
|
63 |
instructions.includes("</s>") ||
|
64 |
instructions.includes("<s>") ||
|
65 |
+
instructions.includes("/s>") ||
|
66 |
instructions.includes("[INST]") ||
|
67 |
instructions.includes("[/INST]") ||
|
68 |
instructions.includes("<SYS>") ||
|
69 |
+
instructions.includes("<<SYS>>") ||
|
70 |
instructions.includes("</SYS>") ||
|
71 |
+
instructions.includes("<</SYS>>") ||
|
72 |
+
instructions.includes("<|user|>") ||
|
73 |
instructions.includes("<|end|>") ||
|
74 |
+
instructions.includes("<|system|>") ||
|
75 |
instructions.includes("<|assistant|>")
|
76 |
) {
|
77 |
break
|
|
|
92 |
.replaceAll("<|end|>", "")
|
93 |
.replaceAll("<s>", "")
|
94 |
.replaceAll("</s>", "")
|
95 |
+
.replaceAll("/s>", "")
|
96 |
.replaceAll("[INST]", "")
|
97 |
.replaceAll("[/INST]", "")
|
98 |
.replaceAll("<SYS>", "")
|
99 |
+
.replaceAll("<<SYS>>", "")
|
100 |
.replaceAll("</SYS>", "")
|
101 |
+
.replaceAll("<</SYS>>", "")
|
102 |
+
.replaceAll("<|system|>", "")
|
103 |
+
.replaceAll("<|user|>", "")
|
104 |
+
.replaceAll("<|all|>", "")
|
105 |
.replaceAll("<|assistant|>", "")
|
106 |
.replaceAll('""', '"')
|
107 |
)
|
src/lib/createLlamaPrompt.ts
CHANGED
@@ -3,7 +3,7 @@ export function createLlamaPrompt(messages: Array<{ role: string, content: strin
|
|
3 |
const B_INST = "[INST]", E_INST = "[/INST]";
|
4 |
const B_SYS = "<<SYS>>\n", E_SYS = "\n<</SYS>>\n\n";
|
5 |
const BOS = "<s>", EOS = "</s>";
|
6 |
-
const DEFAULT_SYSTEM_PROMPT = "You are a helpful, respectful and honest assistant. Always answer
|
7 |
|
8 |
if (messages[0].role != "system"){
|
9 |
messages = [
|
|
|
3 |
const B_INST = "[INST]", E_INST = "[/INST]";
|
4 |
const B_SYS = "<<SYS>>\n", E_SYS = "\n<</SYS>>\n\n";
|
5 |
const BOS = "<s>", EOS = "</s>";
|
6 |
+
const DEFAULT_SYSTEM_PROMPT = "You are a helpful, respectful and honest storywriting assistant. Always answer in a creative and entertaining way, while being safe. Please ensure that your stories and captions are socially unbiased and positive in nature. If a request does not make any sense, go on anyway, as we are writing a fantasy story.";
|
7 |
|
8 |
if (messages[0].role != "system"){
|
9 |
messages = [
|
src/lib/createZephyrPrompt.ts
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
interface Message {
|
3 |
+
role: "system" | "user" | "assistant";
|
4 |
+
content: string;
|
5 |
+
}
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Formats the messages for the chat with the LLM model in the style of a pirate.
|
9 |
+
* @param messages - Array of message objects with role and content.
|
10 |
+
* @param systemMessage - The system's initial instructions, defaulted to a friendly pirate-style chatbot.
|
11 |
+
* @returns The formatted chat prompt.
|
12 |
+
*/
|
13 |
+
export function createZephyrPrompt(messages: Message[]): string {
|
14 |
+
let prompt = ``;
|
15 |
+
|
16 |
+
// Iterate over messages and generate corresponding chat entries.
|
17 |
+
messages.forEach(message => {
|
18 |
+
prompt += `<|${message.role}|>\n${message.content.trim()}</s>`;
|
19 |
+
});
|
20 |
+
|
21 |
+
if (messages.at(-1)?.role === "user") {
|
22 |
+
// Append the assistant's tag for the next response but without a closing tag.
|
23 |
+
prompt += `<|assistant|>`;
|
24 |
+
}
|
25 |
+
|
26 |
+
return prompt;
|
27 |
+
}
|