make user set the stack when importing code
This commit is contained in:
parent
52fee9e49b
commit
e8e3d4cb6f
@ -124,9 +124,20 @@ Generate code for a web page that looks exactly like this.
|
|||||||
|
|
||||||
|
|
||||||
def assemble_imported_code_prompt(
|
def assemble_imported_code_prompt(
|
||||||
code: str, result_image_data_url: Union[str, None] = None
|
code: str, stack: str, result_image_data_url: Union[str, None] = None
|
||||||
) -> List[ChatCompletionMessageParam]:
|
) -> List[ChatCompletionMessageParam]:
|
||||||
system_content = IMPORTED_CODE_TAILWIND_SYSTEM_PROMPT
|
system_content = IMPORTED_CODE_TAILWIND_SYSTEM_PROMPT
|
||||||
|
if stack == "html_tailwind":
|
||||||
|
system_content = IMPORTED_CODE_TAILWIND_SYSTEM_PROMPT
|
||||||
|
elif stack == "react_tailwind":
|
||||||
|
system_content = REACT_TAILWIND_SYSTEM_PROMPT
|
||||||
|
elif stack == "bootstrap":
|
||||||
|
system_content = BOOTSTRAP_SYSTEM_PROMPT
|
||||||
|
elif stack == "ionic_tailwind":
|
||||||
|
system_content = IONIC_TAILWIND_SYSTEM_PROMPT
|
||||||
|
else:
|
||||||
|
raise Exception("Code config is not one of available options")
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
"role": "system",
|
"role": "system",
|
||||||
|
|||||||
@ -130,7 +130,9 @@ async def stream_code(websocket: WebSocket):
|
|||||||
# If this generation started off with imported code, we need to assemble the prompt differently
|
# If this generation started off with imported code, we need to assemble the prompt differently
|
||||||
if params.get("isImportedFromCode") and params["isImportedFromCode"]:
|
if params.get("isImportedFromCode") and params["isImportedFromCode"]:
|
||||||
original_imported_code = params["history"][0]
|
original_imported_code = params["history"][0]
|
||||||
prompt_messages = assemble_imported_code_prompt(original_imported_code)
|
prompt_messages = assemble_imported_code_prompt(
|
||||||
|
original_imported_code, generated_code_config
|
||||||
|
)
|
||||||
for index, text in enumerate(params["history"][1:]):
|
for index, text in enumerate(params["history"][1:]):
|
||||||
if index % 2 == 0:
|
if index % 2 == 0:
|
||||||
message: ChatCompletionMessageParam = {
|
message: ChatCompletionMessageParam = {
|
||||||
@ -182,6 +184,8 @@ async def stream_code(websocket: WebSocket):
|
|||||||
|
|
||||||
image_cache = create_alt_url_mapping(params["history"][-2])
|
image_cache = create_alt_url_mapping(params["history"][-2])
|
||||||
|
|
||||||
|
pprint_prompt(prompt_messages)
|
||||||
|
|
||||||
if SHOULD_MOCK_AI_RESPONSE:
|
if SHOULD_MOCK_AI_RESPONSE:
|
||||||
completion = await mock_completion(process_chunk)
|
completion = await mock_completion(process_chunk)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -262,9 +262,20 @@ function App() {
|
|||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
function importFromCode(code: string) {
|
// TODO: Rename everything to "stack" instead of "config"
|
||||||
setAppState(AppState.CODE_READY);
|
function setStack(stack: GeneratedCodeConfig) {
|
||||||
|
setSettings((prev) => ({
|
||||||
|
...prev,
|
||||||
|
generatedCodeConfig: stack,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function importFromCode(code: string, stack: GeneratedCodeConfig) {
|
||||||
|
setIsImportedFromCode(true);
|
||||||
|
|
||||||
|
// Set up this project
|
||||||
setGeneratedCode(code);
|
setGeneratedCode(code);
|
||||||
|
setStack(stack);
|
||||||
setAppHistory([
|
setAppHistory([
|
||||||
{
|
{
|
||||||
type: "code_create",
|
type: "code_create",
|
||||||
@ -274,7 +285,8 @@ function App() {
|
|||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
setCurrentVersion(0);
|
setCurrentVersion(0);
|
||||||
setIsImportedFromCode(true);
|
|
||||||
|
setAppState(AppState.CODE_READY);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -295,12 +307,7 @@ function App() {
|
|||||||
|
|
||||||
<OutputSettingsSection
|
<OutputSettingsSection
|
||||||
generatedCodeConfig={settings.generatedCodeConfig}
|
generatedCodeConfig={settings.generatedCodeConfig}
|
||||||
setGeneratedCodeConfig={(config: GeneratedCodeConfig) =>
|
setGeneratedCodeConfig={(config) => setStack(config)}
|
||||||
setSettings((prev) => ({
|
|
||||||
...prev,
|
|
||||||
generatedCodeConfig: config,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
shouldDisableUpdates={
|
shouldDisableUpdates={
|
||||||
appState === AppState.CODING || appState === AppState.CODE_READY
|
appState === AppState.CODING || appState === AppState.CODE_READY
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,13 +10,33 @@ import {
|
|||||||
DialogTrigger,
|
DialogTrigger,
|
||||||
} from "./ui/dialog";
|
} from "./ui/dialog";
|
||||||
import { Textarea } from "./ui/textarea";
|
import { Textarea } from "./ui/textarea";
|
||||||
|
import OutputSettingsSection from "./OutputSettingsSection";
|
||||||
|
import { GeneratedCodeConfig } from "../types";
|
||||||
|
import toast from "react-hot-toast";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
importFromCode: (code: string) => void;
|
importFromCode: (code: string, stack: GeneratedCodeConfig) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ImportCodeSection({ importFromCode }: Props) {
|
function ImportCodeSection({ importFromCode }: Props) {
|
||||||
const [code, setCode] = useState("");
|
const [code, setCode] = useState("");
|
||||||
|
const [stack, setStack] = useState<GeneratedCodeConfig | undefined>(
|
||||||
|
undefined
|
||||||
|
);
|
||||||
|
|
||||||
|
const doImport = () => {
|
||||||
|
if (code === "") {
|
||||||
|
toast.error("Please paste in some code");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack === undefined) {
|
||||||
|
toast.error("Please select your stack");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
importFromCode(code, stack);
|
||||||
|
};
|
||||||
return (
|
return (
|
||||||
<Dialog>
|
<Dialog>
|
||||||
<DialogTrigger asChild>
|
<DialogTrigger asChild>
|
||||||
@ -36,8 +56,17 @@ function ImportCodeSection({ importFromCode }: Props) {
|
|||||||
className="w-full h-64"
|
className="w-full h-64"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<OutputSettingsSection
|
||||||
|
generatedCodeConfig={stack}
|
||||||
|
setGeneratedCodeConfig={(config: GeneratedCodeConfig) =>
|
||||||
|
setStack(config)
|
||||||
|
}
|
||||||
|
label="Stack:"
|
||||||
|
shouldDisableUpdates={false}
|
||||||
|
/>
|
||||||
|
|
||||||
<DialogFooter>
|
<DialogFooter>
|
||||||
<Button type="submit" onClick={() => importFromCode(code)}>
|
<Button type="submit" onClick={doImport}>
|
||||||
Import
|
Import
|
||||||
</Button>
|
</Button>
|
||||||
</DialogFooter>
|
</DialogFooter>
|
||||||
|
|||||||
@ -43,20 +43,22 @@ function generateDisplayComponent(config: GeneratedCodeConfig) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
generatedCodeConfig: GeneratedCodeConfig;
|
generatedCodeConfig: GeneratedCodeConfig | undefined;
|
||||||
setGeneratedCodeConfig: (config: GeneratedCodeConfig) => void;
|
setGeneratedCodeConfig: (config: GeneratedCodeConfig) => void;
|
||||||
|
label?: string;
|
||||||
shouldDisableUpdates?: boolean;
|
shouldDisableUpdates?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
function OutputSettingsSection({
|
function OutputSettingsSection({
|
||||||
generatedCodeConfig,
|
generatedCodeConfig,
|
||||||
setGeneratedCodeConfig,
|
setGeneratedCodeConfig,
|
||||||
|
label = "Generating:",
|
||||||
shouldDisableUpdates = false,
|
shouldDisableUpdates = false,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-y-2 justify-between text-sm">
|
<div className="flex flex-col gap-y-2 justify-between text-sm">
|
||||||
<div className="grid grid-cols-3 items-center gap-4">
|
<div className="grid grid-cols-3 items-center gap-4">
|
||||||
<span>Generating:</span>
|
<span>{label}</span>
|
||||||
<Select
|
<Select
|
||||||
value={generatedCodeConfig}
|
value={generatedCodeConfig}
|
||||||
onValueChange={(value: string) =>
|
onValueChange={(value: string) =>
|
||||||
@ -65,7 +67,9 @@ function OutputSettingsSection({
|
|||||||
disabled={shouldDisableUpdates}
|
disabled={shouldDisableUpdates}
|
||||||
>
|
>
|
||||||
<SelectTrigger className="col-span-2" id="output-settings-js">
|
<SelectTrigger className="col-span-2" id="output-settings-js">
|
||||||
{generateDisplayComponent(generatedCodeConfig)}
|
{generatedCodeConfig
|
||||||
|
? generateDisplayComponent(generatedCodeConfig)
|
||||||
|
: "Select a stack"}
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectGroup>
|
<SelectGroup>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user