Skip to content

Commit 4f5a3cf

Browse files
committed
Add o1
1 parent f72644b commit 4f5a3cf

File tree

6 files changed

+440
-1816
lines changed

6 files changed

+440
-1816
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"framer-motion": "^8.4.3",
2929
"immer": "^9.0.21",
3030
"lodash": "^4.17.21",
31-
"openai": "^3.2.1",
31+
"openai": "^4.78.1",
3232
"prettier": "^2.8.4",
3333
"react": "^18.2.0",
3434
"react-dom": "^18.2.0",
@@ -37,6 +37,7 @@
3737
"react-syntax-highlighter": "^15.5.0",
3838
"react-textarea-autosize": "^8.4.1",
3939
"react-use": "^17.4.0",
40+
"sass": "^1.83.4",
4041
"zustand": "^4.3.6"
4142
},
4243
"devDependencies": {
@@ -72,7 +73,6 @@
7273
"html-webpack-plugin": "^5.5.0",
7374
"jest": "^29.5.0",
7475
"jest-environment-jsdom": "^29.5.0",
75-
"node-sass": "^8.0.0",
7676
"sass-loader": "^13.2.0",
7777
"source-map-loader": "^3.0.1",
7878
"style-loader": "^3.3.1",

src/common/ModelDropdown.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,13 @@ import React from 'react';
33
import { useAppState } from '../state/store';
44

55
const ModelDropdown = () => {
6-
const { selectedModel, updateSettings } = useAppState((state) => ({
7-
selectedModel: state.settings.selectedModel,
8-
updateSettings: state.settings.actions.update,
9-
}));
10-
11-
const { openAIKey } = useAppState((state) => ({
12-
openAIKey: state.settings.openAIKey,
13-
}));
6+
const selectedModel = useAppState((state) => state.settings.selectedModel);
7+
const updateSettings = useAppState((state) => state.settings.actions.update);
8+
const openAIKey = useAppState((state) => state.settings.openAIKey);
149

1510
if (!openAIKey) return null;
1611

1712
return (
18-
// Chakra UI Select component
1913
<Select
2014
value={selectedModel || ''}
2115
onChange={(e) => updateSettings({ selectedModel: e.target.value })}
@@ -26,6 +20,7 @@ const ModelDropdown = () => {
2620
<option value="gpt-4-1106-preview">GPT-4 Turbo</option>
2721
<option value="gpt-4o">GPT-4o</option>
2822
<option value="gpt-4o-mini">GPT-4o mini</option>
23+
<option value="o1">o1</option>
2924
</Select>
3025
);
3126
};

src/common/TaskHistory.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ const TaskHistoryItem = ({ index, entry }: TaskHistoryItemProps) => {
9393
</AccordionButton>
9494
</Heading>
9595
<AccordionPanel backgroundColor="gray.100" p="2">
96-
<Accordion allowMultiple w="full" defaultIndex={1}>
96+
<Accordion allowMultiple allowToggle w="full" defaultIndex={1}>
9797
<CollapsibleComponent
9898
title="Prompt"
9999
subtitle={`${entry.usage.prompt_tokens} tokens`}

src/helpers/determineNextAction.ts

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import {
2-
Configuration,
3-
CreateCompletionResponseUsage,
4-
OpenAIApi,
5-
} from 'openai';
1+
import { OpenAI } from 'openai';
62
import { useAppState } from '../state/store';
73
import { availableActions } from './availableActions';
84
import { ParsedResponseSuccess } from './parseResponse';
@@ -47,44 +43,45 @@ export async function determineNextAction(
4743
return null;
4844
}
4945

50-
const openai = new OpenAIApi(
51-
new Configuration({
52-
apiKey: key,
53-
})
54-
);
46+
const openai = new OpenAI({
47+
apiKey: key,
48+
dangerouslyAllowBrowser: true,
49+
});
5550

5651
for (let i = 0; i < maxAttempts; i++) {
5752
try {
58-
const completion = await openai.createChatCompletion({
59-
model: model,
53+
const completion = await openai.chat.completions.create({
54+
model,
6055
messages: [
6156
{
6257
role: 'system',
6358
content: systemMessage,
6459
},
6560
{ role: 'user', content: prompt },
6661
],
67-
max_tokens: 500,
68-
temperature: 0,
62+
max_completion_tokens: 5000,
63+
reasoning_effort: model === 'o1' ? 'low' : undefined,
64+
temperature: model === 'o1' ? undefined : 0,
6965
stop: ['</Action>'],
7066
});
7167

68+
console.log('completion', completion);
69+
7270
return {
73-
usage: completion.data.usage as CreateCompletionResponseUsage,
71+
usage: completion.usage,
7472
prompt,
75-
response:
76-
completion.data.choices[0].message?.content?.trim() + '</Action>',
73+
response: completion.choices[0].message?.content?.trim() + '</Action>',
7774
};
7875
} catch (error: any) {
7976
console.log('determineNextAction error', error);
80-
if (error.response.data.error.message.includes('server error')) {
77+
if (error.message.includes('server error')) {
8178
// Problem with the OpenAI API, try again
8279
if (notifyError) {
83-
notifyError(error.response.data.error.message);
80+
notifyError(error.message);
8481
}
8582
} else {
8683
// Another error, give up
87-
throw new Error(error.response.data.error.message);
84+
throw new Error(error.message);
8885
}
8986
}
9087
}

src/helpers/parseResponse.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ export type ParsedResponseSuccess = {
99
export type ParsedResponse =
1010
| ParsedResponseSuccess
1111
| {
12-
error: string;
13-
};
12+
error: string;
13+
};
1414

1515
export function parseResponse(text: string): ParsedResponse {
1616
const thoughtMatch = text.match(/<Thought>(.*?)<\/Thought>/);
@@ -81,7 +81,11 @@ export function parseResponse(text: string): ParsedResponse {
8181
parsedArgs[expectedArg.name] = numberValue;
8282
} else if (expectedArg.type === 'string') {
8383
const stringValue =
84-
(arg.startsWith('"') && arg.endsWith('"')) || (arg.startsWith("'") && arg.endsWith("'")) || (arg.startsWith("`") && arg.endsWith("`")) ? arg.slice(1, -1) : null;
84+
(arg.startsWith('"') && arg.endsWith('"')) ||
85+
(arg.startsWith("'") && arg.endsWith("'")) ||
86+
(arg.startsWith('`') && arg.endsWith('`'))
87+
? arg.slice(1, -1)
88+
: null;
8589

8690
if (stringValue === null) {
8791
return {

0 commit comments

Comments
 (0)