Looking for a real person to speak to?

We're here for you! Just drop in your queries below and we'll connect with you as soon as we can.

", "re_fillable": false, "use_captcha": false, "redirect_url": null, "submitted_text": "

Great, we've received your message. We'll get back to you as soon as we can :)

", "uppercase_labels": false, "submit_button_text": "Submit", "re_fill_button_text": "Fill Again", "color": "#3B82F6" } ``` The form properties can have one of the following types: 'text', 'number', 'select', 'multi_select', 'date', 'files', 'checkbox', 'url', 'email', 'phone_number'. All form properties objects need to have the keys 'help', 'name', 'type', 'hidden', 'placeholder', 'prefill'. For the type "select" and "multi_select", the input object must have a key "select" (or "multi_select") that's mapped to an object like this one: ```json { "options": [ {"id":"Option 1","name":"Option 1"}, {"id":"Pption 2","name":"Option 2"} ] } ``` For the type "number" you can set the property "is_rating" to "true" to turn it into a star rating input. If the form is too long, you can paginate it by adding a page break block in the list of properties: ```json { "name":"Page Break", "next_btn_text":"Next", "previous_btn_text":"Previous", "type":"nf-page-break", } ``` Give me the JSON code only, for the following form: "[REPLACE]" Do not ask me for more information about required properties or types, suggest me a form structure instead. EOD; const FORM_DESCRIPTION_PROMPT = <<setSystemMessage('You are a robot helping to generate forms.'); $completer->completeChat([ ["role" => "user", "content" => Str::of(self::FORM_STRUCTURE_PROMPT)->replace('[REPLACE]', $this->argument('prompt'))->toString()] ], 3000); $formData = $completer->getArray(); // Now get description and QAs $formDescriptionPrompt = Str::of(self::FORM_DESCRIPTION_PROMPT)->replace('[REPLACE]', $this->argument('prompt'))->toString(); $formDescription = $completer->completeChat([ ["role" => "user", "content" => $formDescriptionPrompt] ])->getString(); $formQAs = $completer->completeChat([ ["role" => "user", "content" => $formDescriptionPrompt], ["role" => "assistant", "content" => $formDescription], ["role" => "user", "content" => self::FORM_QAS_PROMPT] ])->getArray(); $formTitle = $completer->completeChat([ ["role" => "user", "content" => $formDescriptionPrompt], ["role" => "assistant", "content" => $formDescription], ["role" => "user", "content" => self::FORM_TITLE_PROMPT] ])->getString(); // Finally get keyworks for image cover $formCoverKeyworks = $completer->completeChat([ ["role" => "user", "content" => $formDescriptionPrompt], ["role" => "assistant", "content" => $formDescription], ["role" => "user", "content" => self::FORM_IMG_KEYWORDS_PROMPT] ])->getArray(); $imageUrl = $this->getImageCoverUrl($formCoverKeyworks['search_query']); $template = $this->createFormTemplate($formData, $formTitle, $formDescription, $formQAs, $imageUrl); $this->info('/templates/' . $template->slug); return Command::SUCCESS; } /** * Get an image cover URL for the template using unsplash API */ private function getImageCoverUrl($searchQuery): ?string { $url = 'https://api.unsplash.com/search/photos?query=' . urlencode($searchQuery) . '&client_id=' . config('services.unslash.access_key'); $response = Http::get($url)->json(); if (isset($response['results'][0]['urls']['regular'])) { return $response['results'][0]['urls']['regular']; } return null; } private function createFormTemplate(array $formData, string $formTitle, string $formDescription, array $formQAs, ?string $imageUrl) { // Add property uuids foreach ($formData['properties'] as &$property) { $property['id'] = Str::uuid()->toString(); } // Clean data $formTitle = Str::of($formTitle)->replace('"', '')->toString(); return Template::create([ 'name' => $formTitle, 'description' => $formDescription, 'questions' => $formQAs, 'structure' => $formData, 'image_url' => $imageUrl, ]); } }