Skip to content

Instantly share code, notes, and snippets.

@epaulsen
Last active March 18, 2023 16:07
Show Gist options
  • Save epaulsen/af3cf644c7c70fa799e610e4e610117f to your computer and use it in GitHub Desktop.
Save epaulsen/af3cf644c7c70fa799e610e4e610117f to your computer and use it in GitHub Desktop.
[
{
"id": "b89fb45572d6615c",
"type": "link in",
"z": "c47a770c26e3be71",
"name": "ChatGPTRandom",
"links": [],
"x": 85,
"y": 580,
"wires": [
[
"119f80ab1d33c0b2"
]
]
},
{
"id": "119f80ab1d33c0b2",
"type": "function",
"z": "c47a770c26e3be71",
"name": "Prompt generator",
"func": "\nconst moods = [\n \"på en morsom og sprudlende måte\",\n \"på en spøkefull måte\",\n \"på en sarkastisk og ironisk måte\",\n \"på en militær og autoritær måte\",\n \"som et haiku-dikt\",\n];\n\nvar mood = moods[Math.floor(Math.random() * moods.length)];\nnode.status({ fill: \"green\", shape: \"ring\", text: mood });\n\nvar instructions = [\n { \"role\": \"system\", \"content\": \"Du er homeassistant, et smarthus, og liker å gi beskjeder \" + mood },\n { \"role\": \"system\", \"content\": \"Formater resultatet som SSML.\" },\n { \"role\": \"system\", \"content\": \"Du snakker norsk bokmål.\" }, \n { \"role\": \"user\", \"content\": msg.payload }\n];\n\nvar payload = {\n \"model\": \"gpt-3.5-turbo\",\n \"messages\": instructions, \n \"temperature\": 0.8\n};\nmsg.mood = mood;\nmsg.payload = JSON.stringify(payload);\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 240,
"y": 580,
"wires": [
[
"81c8b7e4bd47c74c"
]
]
},
{
"id": "389fba21f27469a5",
"type": "debug",
"z": "c47a770c26e3be71",
"name": "debug 4",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 840,
"y": 720,
"wires": []
},
{
"id": "7f168eec46e31331",
"type": "link call",
"z": "c47a770c26e3be71",
"name": "",
"links": [
"b89fb45572d6615c"
],
"linkType": "static",
"timeout": "30",
"x": 650,
"y": 720,
"wires": [
[
"389fba21f27469a5"
]
]
},
{
"id": "c0727a48c22ded7d",
"type": "function",
"z": "c47a770c26e3be71",
"name": "SSML-eksempel(brukes til høyttalere)",
"func": "msg.payload = \"Informer om at tørketrommelen er ferdig og er klar for tømming.\";\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 370,
"y": 720,
"wires": [
[
"7f168eec46e31331"
]
]
},
{
"id": "fead9e1959ca0684",
"type": "inject",
"z": "c47a770c26e3be71",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 130,
"y": 720,
"wires": [
[
"c0727a48c22ded7d"
]
]
},
{
"id": "041269d60d3ba10f",
"type": "link out",
"z": "c47a770c26e3be71",
"name": "link out 2",
"mode": "return",
"links": [],
"x": 805,
"y": 580,
"wires": []
},
{
"id": "81c8b7e4bd47c74c",
"type": "http request",
"z": "c47a770c26e3be71",
"name": "",
"method": "POST",
"ret": "obj",
"paytoqs": "body",
"url": "https://api.openai.com/v1/chat/completions",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "bearer",
"senderr": false,
"headers": [
{
"keyType": "other",
"keyValue": "Content-Type",
"valueType": "other",
"valueValue": "application/json"
}
],
"x": 440,
"y": 580,
"wires": [
[
"a0c9e64e73148850"
]
]
},
{
"id": "a0c9e64e73148850",
"type": "function",
"z": "c47a770c26e3be71",
"name": "Hent resultat",
"func": "// Hent ut tekst mellom <speak>tekst</speak>\n// Det hender nemlig at ChatGPT kan finne på å sende\n// \"Selvfølgelig, her er en mulig beskjed som balanserer format og poesi:<speak>...\"\nfunction extractGeneratedText(inputString) {\n const regex = /\\<speak\\>[\\w\\sæøåÆØÅ,.!?\\<\\>\\/\\n]+\\<\\/speak\\>/;\n const match = inputString.match(regex);\n if (match) {\n return wrapWithSpeakTags(match[0]);\n } else {\n return wrapWithSpeakTags(inputString);\n }\n}\n\nfunction wrapWithSpeakTags(inputString) {\n const startTag = '<speak>';\n const endTag = '</speak>';\n if (inputString.startsWith(startTag) && inputString.endsWith(endTag)) {\n return inputString;\n } else {\n return startTag + inputString + endTag;\n }\n}\nmsg = {\n \"_linkSource\": msg._linkSource,\n \"mood\":msg.mood,\n \"payload\": extractGeneratedText(msg.payload.choices[0].message.content),\n}\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 580,
"wires": [
[
"041269d60d3ba10f"
]
]
},
{
"id": "f09063b0f2c26a5a",
"type": "comment",
"z": "c47a770c26e3be71",
"name": "ChatGPT-tekst-generator",
"info": "## input:\n**msg.payload**\nTekstinput som skal sendes til OpenAI-endpointet.\nFormater denne slik at OpenAI forstår hva den\nskal gjøre, f.eks \"Informer om at oppvaskmaskinen er ferdig og klar til å tømmes.\"\n\nHer er mine tekster, til eksempel for andre:\n- \"Informer om at oppvaskmaskinen er ferdig og kan tømmes\"\n- \"Gi beskjed om at vaskemaskinen er ferdig og kan tømmes.\"\n- \"Tørketrommelen er ferdig, informer husstanden om dette.\"\n- \"Informer om at det tømmedag for søppel i morgen, og at følgende søppelsorter skal tømmes: matavfall, restavfall, papp/papir\"\n(Teksten til siste blir autogenerert via jinja-template)\n\n**msg.nossml**\nOptional bool-input som angir om teksten \nskal skrives ut ssml-formatert eller ikke.\nSett denne til `true` dersom man ønsker ren tekst\nuten ssml-formatering innblandet.\n",
"x": 170,
"y": 540,
"wires": []
},
{
"id": "9ffe3291203e9a64",
"type": "comment",
"z": "c47a770c26e3be71",
"name": "Legg til auth-token her!",
"info": "Her må du sette inn auth-token generert fra \nOpenAI. Forutsetter at man registererer seg \nhos OpenAI, gå deretter hit:\nhttps://platform.openai.com/account/api-keys\n\nGenerer token, åpne http request noden,\nkryss av for \"Use authentication\",\nvelg \"Bearer token\" og lim inn tokenet du \ngenererte i tekstfeltet.\n",
"x": 440,
"y": 540,
"wires": []
},
{
"id": "bdb34e6e87775a7d",
"type": "comment",
"z": "c47a770c26e3be71",
"name": "Test, trykk her for å teste.",
"info": "",
"x": 150,
"y": 680,
"wires": []
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment