Skip to content

Commit

Permalink
Format code
Browse files Browse the repository at this point in the history
  • Loading branch information
rodgco committed Nov 8, 2023
1 parent f44f768 commit 12680e9
Show file tree
Hide file tree
Showing 15 changed files with 188 additions and 183 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,3 @@ There is other configuration required to run the server.
Rod's Burger uses the Chat Completion API from OpenAI, the same one used by ChatGPT. Costs for using it can explode if used by too many people, but it is very cheap when used responsibly by a single person. That's why we decided that anyone who wants to experiment our burgers must bring their own [OpenAI API Secret Key](https://platform.openai.com/account/api-keys). Your key will be stored in your browser local storage, and kept safe as long as the source of code of this app remains original.

Go grab your [OpenAI API Secret Key](https://platform.openai.com/account/api-keys) and experiment our Burgers.


42 changes: 21 additions & 21 deletions src/app.css
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
/* Deep-orange Light scheme (Default) */
/* Can be forced with data-theme="light" */
[data-theme="light"],
:root:not([data-theme="dark"]) {
--primary: #f4511e;
--primary-hover: #e64a19;
--primary-focus: rgba(244, 81, 30, 0.125);
--primary-inverse: #FFF;
[data-theme='light'],
:root:not([data-theme='dark']) {
--primary: #f4511e;
--primary-hover: #e64a19;
--primary-focus: rgba(244, 81, 30, 0.125);
--primary-inverse: #fff;
}

/* Deep-orange Dark scheme (Auto) */
/* Automatically enabled if user has Dark mode enabled */
@media only screen and (prefers-color-scheme: dark) {
:root:not([data-theme]) {
--primary: #f4511e;
--primary-hover: #ff5722;
--primary-focus: rgba(244, 81, 30, 0.25);
--primary-inverse: #FFF;
}
:root:not([data-theme]) {
--primary: #f4511e;
--primary-hover: #ff5722;
--primary-focus: rgba(244, 81, 30, 0.25);
--primary-inverse: #fff;
}
}

/* Deep-orange Dark scheme (Forced) */
/* Enabled if forced with data-theme="dark" */
[data-theme="dark"] {
--primary: #f4511e;
--primary-hover: #ff5722;
--primary-focus: rgba(244, 81, 30, 0.25);
--primary-inverse: #FFF;
[data-theme='dark'] {
--primary: #f4511e;
--primary-hover: #ff5722;
--primary-focus: rgba(244, 81, 30, 0.25);
--primary-inverse: #fff;
}

/* Deep-orange (Common styles) */
:root {
--form-element-active-border-color: var(--primary);
--form-element-focus-color: var(--primary-focus);
--switch-color: var(--primary-inverse);
--switch-checked-background-color: var(--primary);
--form-element-active-border-color: var(--primary);
--form-element-focus-color: var(--primary-focus);
--switch-color: var(--primary-inverse);
--switch-checked-background-color: var(--primary);
}
6 changes: 3 additions & 3 deletions src/app.d.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// See https://kit.svelte.dev/docs/types#app

import type { OpenAIChatMessage } from "$lib/server/openai";
import type { OpenAIChatMessage } from '$lib/server/openai';

// for information about these interfaces
declare global {
namespace App {
// interface Error {}
interface Locals {
messages: OpenAIChatMessage[];
}
messages: OpenAIChatMessage[];
}
// interface PageData {}
// interface Platform {}
}
Expand Down
61 changes: 35 additions & 26 deletions src/app.html
Original file line number Diff line number Diff line change
@@ -1,38 +1,47 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />

<meta name="application-name" content="Rod's Burger">
<meta name="theme-color" content="#f4511e">
<meta name="msapplication-navbutton-color" content="#f4511e">
<meta name="msapplication-starturl" content="/">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="application-name" content="Rod's Burger" />
<meta name="theme-color" content="#f4511e" />
<meta name="msapplication-navbutton-color" content="#f4511e" />
<meta name="msapplication-starturl" content="/" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />

<!-- Apple and Android home screen icons -->
<link href="%sveltekit.assets%/homescreen-logo(120).png" rel="apple-touch-icon" /> <!-- 120×120px apple-touch-icon.png -->
<link href="%sveltekit.assets%/homescreen-logo(152).png" rel="apple-touch-icon" sizes="152x152" />
<link href="%sveltekit.assets%/homescreen-logo(167).png" rel="apple-touch-icon" sizes="167x167" />
<link href="%sveltekit.assets%/homescreen-logo.png" rel="apple-touch-icon" sizes="180x180" />
<link href="%sveltekit.assets%/homescreen-logo(192).png" rel="icon" sizes="192x192" />
<link href="%sveltekit.assets%/homescreen-logo(128).png" rel="icon" sizes="128x128" />
<!-- Apple and Android home screen icons -->
<link href="%sveltekit.assets%/homescreen-logo(120).png" rel="apple-touch-icon" />
<!-- 120×120px apple-touch-icon.png -->
<link
href="%sveltekit.assets%/homescreen-logo(152).png"
rel="apple-touch-icon"
sizes="152x152"
/>
<link
href="%sveltekit.assets%/homescreen-logo(167).png"
rel="apple-touch-icon"
sizes="167x167"
/>
<link href="%sveltekit.assets%/homescreen-logo.png" rel="apple-touch-icon" sizes="180x180" />
<link href="%sveltekit.assets%/homescreen-logo(192).png" rel="icon" sizes="192x192" />
<link href="%sveltekit.assets%/homescreen-logo(128).png" rel="icon" sizes="128x128" />

<!-- Apple hide Safari -->
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<!-- Apple hide Safari -->
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes" />

<!-- Apple changing the status bar appearance -->
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<!-- Apple changing the status bar appearance -->
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />

<!-- Android add to the home screen -->
<meta name="mobile-web-app-capable" content="yes">
<!-- Android add to the home screen -->
<meta name="mobile-web-app-capable" content="yes" />

<meta name="apple-mobile-web-app-title" content="Rod's Burger">
<meta name="apple-mobile-web-app-title" content="Rod's Burger" />

<link rel="stylesheet" href="%sveltekit.assets%/fnt-icon.css" media="screen,print" />
%sveltekit.head%
</head>
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
Expand Down
62 changes: 31 additions & 31 deletions src/lib/chat/attendant.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,41 +13,41 @@ class Attendant extends Conversation {
}

reset() {
const { secret_key, model } = get(settings);
if (this.secretKey === '' && secret_key === '') {
this.replaceMessages([missingKeyMessage]);
this.close();
} else {
this.secretKey = secret_key;
this.model = model;
this.update((current) => ({ ...current, status: 'open', messages: [initialMessage] }));
}
const { secret_key, model } = get(settings);
if (this.secretKey === '' && secret_key === '') {
this.replaceMessages([missingKeyMessage]);
this.close();
} else {
this.secretKey = secret_key;
this.model = model;
this.update((current) => ({ ...current, status: 'open', messages: [initialMessage] }));
}
}

async callAssistant() {
await this.callAPI()
.then(async (/** @type {string} */ response) => {
this.addMessage({ role: 'assistant', content: response });
async callAssistant() {
await this.callAPI()
.then(async (/** @type {string} */ response) => {
this.addMessage({ role: 'assistant', content: response });

const isComplete = await backOffice.checkCompleteness(this.messages);
console.log('isComplete', isComplete);
const { complete, confirmed, name, message, items } = isComplete;
const isComplete = await backOffice.checkCompleteness(this.messages);
console.log('isComplete', isComplete);
const { complete, confirmed, name, message, items } = isComplete;

if (complete && confirmed) {
this.addMessage({
role: 'assistant',
content: `JSON: ${JSON.stringify({ name, message, items })}`
});
this.addMessage(resetMessage);
this.close();
}
})
.catch((e) => {
console.log('error', e);
this.addMessage(missingKeyMessage);
this.close();
});
}
if (complete && confirmed) {
this.addMessage({
role: 'assistant',
content: `JSON: ${JSON.stringify({ name, message, items })}`
});
this.addMessage(resetMessage);
this.close();
}
})
.catch((e) => {
console.log('error', e);
this.addMessage(missingKeyMessage);
this.close();
});
}
}

const { secret_key, model } = get(settings);
Expand Down
11 changes: 3 additions & 8 deletions src/lib/chat/messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,11 @@ In our catalog we offer:
/** @type {OpenAIChatMessage} */
const missingKeyMessage = {
role: 'assistant',
content: 'You need an OpenAI API Key to use Rod\'s Burger, click on setings (engine button at top).'
content:
"You need an OpenAI API Key to use Rod's Burger, click on setings (engine button at top)."
};

/** @type {OpenAIChatMessage} */
const resetMessage = { role: 'assistant', content: 'Click Reset to restart' };

export {
slogan,
initialMessage,
systemMessage,
missingKeyMessage,
resetMessage
};
export { slogan, initialMessage, systemMessage, missingKeyMessage, resetMessage };
77 changes: 38 additions & 39 deletions src/lib/chat/store.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,57 +24,56 @@ export default class Conversation extends Store {
this.update((data) => ({ ...data, messages: data.messages.toSpliced(index, 1) }));
}

/** @type {OpenAIChatMessage} */
get systemMessage() {
return this.current().systemMessage;
}
/** @type {OpenAIChatMessage} */
get systemMessage() {
return this.current().systemMessage;
}

/** @type {OpenAIChatMessage[]} */
get messages() {
return this.current().messages;
}
/** @type {OpenAIChatMessage[]} */
get messages() {
return this.current().messages;
}

/** @type {string} */
get secretKey() {
return this.current().secretKey;
}
/** @type {string} */
get secretKey() {
return this.current().secretKey;
}

/** @param {string} secretKey */
set secretKey(secretKey) {
this.update((data) => ({ ...data, secretKey }));
}
/** @param {string} secretKey */
set secretKey(secretKey) {
this.update((data) => ({ ...data, secretKey }));
}

/** @type {'gpt-3.5-turbo'|'gpt-4'|'gpt-4-1106-preview'} */
get model() {
return this.current().model;
}
/** @type {'gpt-3.5-turbo'|'gpt-4'|'gpt-4-1106-preview'} */
get model() {
return this.current().model;
}

/** @param {'gpt-3.5-turbo'|'gpt-4'|'gpt-4-1106-preview'} model */
set model(model) {
this.update((data) => ({ ...data, model }));
}
/** @param {'gpt-3.5-turbo'|'gpt-4'|'gpt-4-1106-preview'} model */
set model(model) {
this.update((data) => ({ ...data, model }));
}

/**
* @param {'gpt-3.5-turbo'|'gpt-4'|'gpt-4-1106-preview'|null} model
* @param {Partial<OpenAIChatCompletionRequest>} config
* @returns {Promise<string>}
*/
async callAPI(model = null, config = {}) {
config = {
temperature: 0.5,
...config,
messages: [this.systemMessage, ...this.messages]
};
/**
* @param {'gpt-3.5-turbo'|'gpt-4'|'gpt-4-1106-preview'|null} model
* @param {Partial<OpenAIChatCompletionRequest>} config
* @returns {Promise<string>}
*/
async callAPI(model = null, config = {}) {
config = {
temperature: 0.5,
...config,
messages: [this.systemMessage, ...this.messages]
};

const openai = openaiAPI(this.secretKey, model || this.model);
const openai = openaiAPI(this.secretKey, model || this.model);

/** @type {OpenAIChatCompletionResponse} */
const completion = await openai.createChatCompletion(config);

/** @type {string} */
const response = completion.choices[0].message.content.trim();

return response;
}
return response;
}
}

33 changes: 16 additions & 17 deletions src/lib/chat/types.d.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import '$lib/openai/types.d'
import '$lib/openai/types.d';

/**
* @typedef {Object} Item
* @property {string} item
* @property {number} qty
* @property {string[]} extras
*/
* @typedef {Object} Item
* @property {string} item
* @property {number} qty
* @property {string[]} extras
*/

/**
* @typedef {Object} Order
* @property {string} name
* @property {string} message
* @property {Item[]} items
*/
* @typedef {Object} Order
* @property {string} name
* @property {string} message
* @property {Item[]} items
*/

/**
* @typedef {Object} Session
* @property {string} sessionid
* @property {OpenAIChatMessage[]} messages
* @property {Order[]} orders
*/
* @typedef {Object} Session
* @property {string} sessionid
* @property {OpenAIChatMessage[]} messages
* @property {Order[]} orders
*/

/**
* @typedef {Object} FrontendData
Expand All @@ -29,4 +29,3 @@ import '$lib/openai/types.d'
* @property {string} secretKey
* @property {'gpt-3.5-turbo'|'gpt-4'|'gpt-4-1106-preview'} model
*/

Loading

1 comment on commit 12680e9

@vercel
Copy link

@vercel vercel bot commented on 12680e9 Nov 9, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

rodburger – ./

rodburger-git-main-rodgco.vercel.app
rodburger.vercel.app
rodburger-rodgco.vercel.app
burger.rodg.co

Please sign in to comment.