mirror of
https://github.com/wasp-lang/wasp.git
synced 2024-11-22 01:24:49 +03:00
Updated GPT models in Wasp AI (3.5 -> 4o).
This commit is contained in:
parent
23366a3550
commit
8250afeb8e
@ -41,7 +41,7 @@ RUN cd .wasp/build/server && npm run bundle
|
||||
# TODO: Use pm2?
|
||||
# TODO: Use non-root user (node).
|
||||
FROM base AS server-production
|
||||
RUN curl -sSL https://get.wasp-lang.dev/installer.sh | sh -s -- -v 0.14.0
|
||||
RUN curl -sSL https://get.wasp-lang.dev/installer.sh | sh -s -- -v 0.14.2
|
||||
ENV PATH "$PATH:/root/.local/bin"
|
||||
ENV NODE_ENV production
|
||||
WORKDIR /app
|
||||
|
@ -75,23 +75,16 @@ const faqs = [
|
||||
|
||||
<br/><br/>
|
||||
|
||||
We use GPT4 during the planning phase, since that is the most critical step, and then use GPT3.5 for the rest of the steps.
|
||||
Although using GPT4 exclusively does give better results, we use a mix to keep the costs, generation time, and bandwidth acceptable (due to pricing and rate limits of GPT4).
|
||||
We use GPT4o for all the phases at the moment of writing, as it gives the best ratio of quality / cost.
|
||||
|
||||
<br/><br/>
|
||||
|
||||
However, in the future, when GPT4 becomes cheaper / faster, it would make sense to switch to it completely, since it does generate better code!
|
||||
</p>
|
||||
},
|
||||
{
|
||||
question: '[Advanced] Can I use GPT4 for the whole app? / Can I run Mage locally?',
|
||||
question: '[Advanced] Can I choose GPT model? / Can I run Mage locally?',
|
||||
answer: <p>
|
||||
As mentioned above, we use GPT4 + GPT3.5 for practical reasons, even though using GPT4 exclusively does give better results.<br/>
|
||||
If you have access yourself to the OpenAI API, you can choose GPT model for the whole app, or play with adjusting the temperature, by running the Wasp GPT code agent locally! So same thing like Mage, but via CLI.<br/>
|
||||
<br/>
|
||||
However, if you have access yourself to the OpenAI API, you can use GPT4 for the whole app, or play with adjusting the temperature, by running the Wasp GPT code agent locally! So same thing like Mage, but via CLI.<br/>
|
||||
Note: generating an app usually consumes from 20k to 50k tokens, which is then approximately $1 to $2 per app with the current GPT4 pricing (Jul 11th 2023).<br/>
|
||||
<br/>
|
||||
To run Wasp AI (Mage) locally, make sure you have wasp {'>='}v0.12 installed and just run:<br/>
|
||||
To run Wasp AI (Mage) locally, make sure you have wasp installed and just run:<br/>
|
||||
<span className="bg-slate-800 text-slate-200 p-1 rounded">
|
||||
wasp new
|
||||
</span><br/>
|
||||
|
@ -455,11 +455,11 @@ export function OnSuccessModal({ isOpen, setIsOpen, appGenerationResult }) {
|
||||
return <span className="py-1 px-2 font-semibold text-pink-800 rounded">{children}</span>;
|
||||
}
|
||||
|
||||
function calcCostForGpt_3_5_Turbo_0125(numTokensSpent) {
|
||||
function calcCostForGpt_4o(numTokensSpent) {
|
||||
const estimatedInputTokenShare = 0.8;
|
||||
const estimatedOutputTokenShare = 1 - estimatedInputTokenShare;
|
||||
const costInUsdForMillionInputTokens = 0.5; // This is price for GPT 3.5 Turbo 0125.
|
||||
const costInUsdForMillionOutputTokens = 1.5; // This is price for GPT 3.5 Turbo 0125.
|
||||
const costInUsdForMillionInputTokens = 5.0; // This is price for gpt-4o-2024-05-13.
|
||||
const costInUsdForMillionOutputTokens = 15.0; // This is price for gpt-4o-2024-05-13.
|
||||
const costInUsdForMillionTokens =
|
||||
costInUsdForMillionInputTokens * estimatedInputTokenShare +
|
||||
costInUsdForMillionOutputTokens * estimatedOutputTokenShare;
|
||||
@ -491,7 +491,7 @@ export function OnSuccessModal({ isOpen, setIsOpen, appGenerationResult }) {
|
||||
<td className="p-2 text-gray-600"> Cost to generate your app: </td>
|
||||
<td className="p-2 text-gray-600">
|
||||
{" "}
|
||||
<FormattedText>{`~$${calcCostForGpt_3_5_Turbo_0125(
|
||||
<FormattedText>{`~$${calcCostForGpt_4o(
|
||||
Number(numTokensSpent)
|
||||
)}`}</FormattedText>{" "}
|
||||
</td>
|
||||
|
@ -1,5 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
## 0.14.2 (2024-09-09)
|
||||
|
||||
Updated GPT models used in Wasp AI to latest models, since 3.5 are getting deprecated.
|
||||
|
||||
Default model used is now 4o (instead of old 4 + 3.5-turbo combo).
|
||||
|
||||
## 0.14.1 (2024-08-26)
|
||||
|
||||
### 🎉 New Features
|
||||
|
@ -55,17 +55,17 @@ createNewProjectInteractiveOnDisk waspProjectDir appName = do
|
||||
"Choose GPT model(s) you want to use:"
|
||||
$ NE.fromList
|
||||
[ Interactive.Option
|
||||
"gpt-4 (planning) + gpt-3.5-turbo (coding)"
|
||||
(Just "Ok results. Cheap and fast. Best cost/benefit ratio.")
|
||||
(ChatGPT.GPT_4_0613, ChatGPT.GPT_3_5_turbo_0125),
|
||||
"gpt-4o (planning + coding)"
|
||||
(Just "Good results. Cheap and fast. Best cost/benefit ratio.")
|
||||
(ChatGPT.GPT_4o, ChatGPT.GPT_4o),
|
||||
Interactive.Option
|
||||
"gpt-4 (planning) + gpt-4-turbo-preview (coding)"
|
||||
(Just "Possibly better results, but somewhat slower and somewhat more expensive (~2-3x).")
|
||||
(ChatGPT.GPT_4_0613, ChatGPT.GPT_4_turbo_Preview),
|
||||
"gpt-4 (planning) + gpt-4o (coding)"
|
||||
(Just "Possibly better results, but somewhat slower and somewhat more expensive.")
|
||||
(ChatGPT.GPT_4, ChatGPT.GPT_4o),
|
||||
Interactive.Option
|
||||
"gpt-4 (planning + coding)"
|
||||
(Just "Best results, but quite slower and quite more expensive (~5x).")
|
||||
(ChatGPT.GPT_4_0613, ChatGPT.GPT_4_0613)
|
||||
(Just "Possibly best results, but quite slower and quite more expensive.")
|
||||
(ChatGPT.GPT_4, ChatGPT.GPT_4)
|
||||
]
|
||||
temperature <-
|
||||
liftIO $
|
||||
|
@ -1,6 +1,6 @@
|
||||
app waspBuild {
|
||||
wasp: {
|
||||
version: "^0.14.1"
|
||||
version: "^0.14.2"
|
||||
},
|
||||
title: "waspBuild"
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
app waspCompile {
|
||||
wasp: {
|
||||
version: "^0.14.1"
|
||||
version: "^0.14.2"
|
||||
},
|
||||
title: "waspCompile"
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
app waspComplexTest {
|
||||
wasp: {
|
||||
version: "^0.14.1"
|
||||
version: "^0.14.2"
|
||||
},
|
||||
auth: {
|
||||
userEntity: User,
|
||||
|
@ -1,6 +1,6 @@
|
||||
app waspJob {
|
||||
wasp: {
|
||||
version: "^0.14.1"
|
||||
version: "^0.14.2"
|
||||
},
|
||||
title: "waspJob"
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
app waspMigrate {
|
||||
wasp: {
|
||||
version: "^0.14.1"
|
||||
version: "^0.14.2"
|
||||
},
|
||||
title: "waspMigrate"
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
app waspNew {
|
||||
wasp: {
|
||||
version: "^0.14.1"
|
||||
version: "^0.14.2"
|
||||
},
|
||||
title: "waspNew"
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ codingChatGPTParams projectDetails =
|
||||
GPT._temperature = Just $ fromMaybe 0.7 (projectDefaultGptTemperature $ _projectConfig projectDetails)
|
||||
}
|
||||
where
|
||||
defaultCodingGptModel = GPT.GPT_3_5_turbo_0125
|
||||
defaultCodingGptModel = GPT.GPT_4o
|
||||
|
||||
planningChatGPTParams :: NewProjectDetails -> ChatGPTParams
|
||||
planningChatGPTParams projectDetails =
|
||||
@ -166,7 +166,7 @@ planningChatGPTParams projectDetails =
|
||||
GPT._temperature = Just $ fromMaybe 0.7 (projectDefaultGptTemperature $ _projectConfig projectDetails)
|
||||
}
|
||||
where
|
||||
defaultPlanningGptModel = GPT.GPT_4_0613
|
||||
defaultPlanningGptModel = GPT.GPT_4o
|
||||
|
||||
fixingChatGPTParams :: ChatGPTParams -> ChatGPTParams
|
||||
fixingChatGPTParams params = params {GPT._temperature = subtract 0.2 <$> GPT._temperature params}
|
||||
|
@ -44,7 +44,7 @@ type PlanRule = String
|
||||
generatePlan :: NewProjectDetails -> [PlanRule] -> CodeAgent Plan
|
||||
generatePlan newProjectDetails planRules = do
|
||||
writeToLog $
|
||||
"\n" <> L.styled L.Generating "Generating" <> " plan (slowest step, usually takes 30 to 90 seconds)"
|
||||
"\n" <> L.styled L.Generating "Generating" <> " plan (slowest step, can take up to 90 seconds for slower models)"
|
||||
<> L.styled (L.Custom [Term.Blink]) "..."
|
||||
initialPlan <- queryChatGPTForJSON (planningChatGPTParams newProjectDetails) chatMessages
|
||||
writeToLog $ "Initial plan generated!\n" <> L.fromText (summarizePlan initialPlan)
|
||||
|
@ -116,6 +116,7 @@ fixWaspFile newProjectDetails waspFilePath plan = do
|
||||
Be careful not to do that.
|
||||
- We are using SQLite as a database for Prisma, so we can't use scalar arrays in PSL, like `String[]`,
|
||||
as those are not supported in SQLite. We can of course normally use arrays of other models, like `Task[]`.
|
||||
- Wasp file should not contain any `entity` declarations! That was ok in older Wasp versions, but now entities are described in prisma.schema file, and not in wasp file.
|
||||
|
||||
With this in mind, generate a new, fixed wasp file.
|
||||
Try not to do big changes like changing names, removing/adding declarations and similar, those are usually correct, focus more on obvious, smaller errors.
|
||||
|
@ -12,7 +12,6 @@ module Wasp.AI.OpenAI.ChatGPT
|
||||
ChatMessage (..),
|
||||
ChatRole (..),
|
||||
getChatResponseContent,
|
||||
checkIfGpt4IsAvailable,
|
||||
)
|
||||
where
|
||||
|
||||
@ -70,13 +69,6 @@ queryChatGPT apiKey params requestMessages = do
|
||||
getChatResponseContent :: ChatResponse -> Text
|
||||
getChatResponseContent = content . message . head . choices
|
||||
|
||||
checkIfGpt4IsAvailable :: OpenAIApiKey -> IO Bool
|
||||
checkIfGpt4IsAvailable apiKey = do
|
||||
let request =
|
||||
HTTP.setRequestHeader "Authorization" [BSU.fromString $ "Bearer " <> apiKey] $
|
||||
HTTP.parseRequest_ $ "GET https://api.openai.com/v1/models/" <> show GPT_4
|
||||
(200 ==) . HTTP.getResponseStatusCode <$> HTTP.httpNoBody request
|
||||
|
||||
data ChatGPTParams = ChatGPTParams
|
||||
{ _model :: !Model,
|
||||
_temperature :: !(Maybe Float)
|
||||
@ -87,20 +79,18 @@ data ChatGPTParams = ChatGPTParams
|
||||
deriving (Show)
|
||||
|
||||
data Model
|
||||
= --
|
||||
GPT_3_5_turbo -- Alias model
|
||||
| GPT_3_5_turbo_0125
|
||||
| GPT_3_5_turbo_1106
|
||||
| --
|
||||
GPT_4_turbo_Preview -- Alias model
|
||||
| GPT_4_0125_Preview
|
||||
| GPT_4_1106_Preview
|
||||
| --
|
||||
= -- New flagship model.
|
||||
GPT_4o -- Alias model
|
||||
| GPT_4o_2024_08_06
|
||||
| -- Faster & cheaper version of the new flagship model.
|
||||
GPT_4o_mini -- Alias model
|
||||
| GPT_4o_mini_2024_07_18
|
||||
| -- Old flagship model.
|
||||
GPT_4 -- Alias model
|
||||
| GPT_4_0613
|
||||
| --
|
||||
GPT_4_32k -- Alias model
|
||||
| GPT_4_32k_0613
|
||||
| -- Faster & cheaper version of the old flagship model.
|
||||
GPT_4_turbo -- Alias model
|
||||
| GPT_4_turbo_2024_04_09
|
||||
deriving (Eq, Bounded, Enum)
|
||||
|
||||
instance Show Model where
|
||||
@ -108,16 +98,14 @@ instance Show Model where
|
||||
|
||||
modelOpenAiId :: Model -> String
|
||||
modelOpenAiId = \case
|
||||
GPT_3_5_turbo -> "gpt-3.5-turbo"
|
||||
GPT_3_5_turbo_0125 -> "gpt-3.5-turbo-0125"
|
||||
GPT_3_5_turbo_1106 -> "gpt-3.5-turbo-1106"
|
||||
GPT_4_turbo_Preview -> "gpt-4-turbo-preview"
|
||||
GPT_4_0125_Preview -> "gpt-4-0125-preview"
|
||||
GPT_4_1106_Preview -> "gpt-4-1106-preview"
|
||||
GPT_4o -> "gpt-4o"
|
||||
GPT_4o_2024_08_06 -> "gpt-4o-2024-08-06"
|
||||
GPT_4o_mini -> "gpt-4o-mini"
|
||||
GPT_4o_mini_2024_07_18 -> "gpt-4o-mini-2024-07-18"
|
||||
GPT_4 -> "gpt-4"
|
||||
GPT_4_0613 -> "gpt-4-0613"
|
||||
GPT_4_32k -> "gpt-4-32k"
|
||||
GPT_4_32k_0613 -> "gpt-4-32k-0613"
|
||||
GPT_4_turbo -> "gpt-4-turbo"
|
||||
GPT_4_turbo_2024_04_09 -> "gpt-4-turbo-2024-04-09"
|
||||
|
||||
instance FromJSON Model where
|
||||
parseJSON = Aeson.withText "Model" $ \t ->
|
||||
|
@ -6,7 +6,7 @@ cabal-version: 2.4
|
||||
-- Consider using hpack, or maybe even hpack-dhall.
|
||||
|
||||
name: waspc
|
||||
version: 0.14.1
|
||||
version: 0.14.2
|
||||
description: Please see the README on GitHub at <https://github.com/wasp-lang/wasp/waspc#readme>
|
||||
homepage: https://github.com/wasp-lang/wasp/waspc#readme
|
||||
bug-reports: https://github.com/wasp-lang/wasp/issues
|
||||
|
Loading…
Reference in New Issue
Block a user