Skip to content

Commit

Permalink
Updated GPT models in Wasp AI (3.5 -> 4o).
Browse files Browse the repository at this point in the history
  • Loading branch information
Martinsos committed Sep 9, 2024
1 parent 23366a3 commit 8250afe
Show file tree
Hide file tree
Showing 16 changed files with 50 additions and 62 deletions.
2 changes: 1 addition & 1 deletion mage/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 4 additions & 11 deletions mage/src/client/components/Faq.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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/>
<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/>
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/>
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/>
Expand Down
8 changes: 4 additions & 4 deletions mage/src/client/pages/ResultPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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>
Expand Down
6 changes: 6 additions & 0 deletions waspc/ChangeLog.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
16 changes: 8 additions & 8 deletions waspc/cli/src/Wasp/Cli/Command/CreateNewProject/AI.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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 $
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions waspc/src/Wasp/AI/GenerateNewProject/Common.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand All @@ -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}
Expand Down
2 changes: 1 addition & 1 deletion waspc/src/Wasp/AI/GenerateNewProject/Plan.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions waspc/src/Wasp/AI/GenerateNewProject/WaspFile.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
44 changes: 16 additions & 28 deletions waspc/src/Wasp/AI/OpenAI/ChatGPT.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ module Wasp.AI.OpenAI.ChatGPT
ChatMessage (..),
ChatRole (..),
getChatResponseContent,
checkIfGpt4IsAvailable,
)
where

Expand Down Expand Up @@ -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)
Expand All @@ -87,37 +79,33 @@ 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
show = modelOpenAiId

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 ->
Expand Down
2 changes: 1 addition & 1 deletion waspc/waspc.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 8250afe

Please sign in to comment.