Skip to content

Commit 0bba9eb

Browse files
committed
feat: handle various data types returned from elements
1 parent cadf331 commit 0bba9eb

File tree

2 files changed

+112
-93
lines changed

2 files changed

+112
-93
lines changed

demo/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<button actions="openAi, reset">click</button>
1717
</form>
1818

19-
<div
19+
<!-- <div
2020
array="users"
2121
array="interviews"
2222
object
@@ -30,7 +30,7 @@
3030
toggle="selected">
3131
<p>{{openAi}}</p>
3232
</div>
33-
</div>
33+
</div> -->
3434

3535
<!-- <script src="../src/CoCreate-openai.js"></script> -->
3636
<script src="./dist/CoCreate.js"></script>

src/index.js

Lines changed: 110 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -72,107 +72,126 @@ async function send(form) {
7272
let elements = form.querySelectorAll('[openai]')
7373

7474
let conversation = forms.get(form)
75-
if (!conversation) {
76-
const crudReference = {
77-
data: {
78-
method: "database.create | database.read | database.update | database.delete | array.create | array.read | array.update | array.delete | index.create | index.read | index.update | index.delete | object.create | object.read | object.update | object.delete",
79-
storage: "" || [""],
80-
database: "" || [""],
81-
array: "" || [""],
82-
index: "" || [""],
83-
object: {} || [{}],
84-
filter: {
85-
query: [{ key: "", value: "", operator: "$eq | $ne | $includes", logicalOperator: "", caseSensitive: "true | false" }],
86-
sort: [{ key: "", direction: "asc | desc" }],
87-
search: [{ value: "", operator: "", caseSensitive: "true | false" }]
88-
}
89-
}
90-
}
91-
const crudObjectReference = {
92-
data: {
93-
method: " object.create | object.read | object.update | object.delete",
94-
array: "" || [""],
95-
object: {} || [{}],
96-
filter: {
97-
query: [{ key: "", value: "", operator: "$eq | $ne | $includes", logicalOperator: "", caseSensitive: "true | false" }],
98-
sort: [{ key: "", direction: "asc | desc" }],
99-
search: [{ value: "", operator: "", caseSensitive: "true | false" }],
100-
limit: 0
101-
}
102-
}
103-
}
75+
// if (!conversation) {
76+
// const crudReference = {
77+
// data: {
78+
// method: "database.create | database.read | database.update | database.delete | array.create | array.read | array.update | array.delete | index.create | index.read | index.update | index.delete | object.create | object.read | object.update | object.delete",
79+
// storage: "" || [""],
80+
// database: "" || [""],
81+
// array: "" || [""],
82+
// index: "" || [""],
83+
// object: {} || [{}],
84+
// filter: {
85+
// query: [{ key: "", value: "", operator: "$eq | $ne | $includes", logicalOperator: "", caseSensitive: "true | false" }],
86+
// sort: [{ key: "", direction: "asc | desc" }],
87+
// search: [{ value: "", operator: "", caseSensitive: "true | false" }]
88+
// }
89+
// }
90+
// }
91+
// const crudObjectReference = {
92+
// data: {
93+
// method: " object.create | object.read | object.update | object.delete",
94+
// array: "" || [""],
95+
// object: {} || [{}],
96+
// filter: {
97+
// query: [{ key: "", value: "", operator: "$eq | $ne | $includes", logicalOperator: "", caseSensitive: "true | false" }],
98+
// sort: [{ key: "", direction: "asc | desc" }],
99+
// search: [{ value: "", operator: "", caseSensitive: "true | false" }],
100+
// limit: 0
101+
// }
102+
// }
103+
// }
104104

105-
const filterObjectReference = {
106-
data: {
107-
method: " object.create | object.read | object.update | object.delete",
108-
array: "files",
109-
object: [{
110-
"_id": "",
111-
"name": "",
112-
"src": "",
113-
"host": [
114-
"*",
115-
],
116-
"directory": "/",
117-
"path": "",
118-
"content-type": "",
119-
"public": "true"
120-
}]
121-
}
122-
}
105+
// const filterObjectReference = {
106+
// data: {
107+
// method: " object.create | object.read | object.update | object.delete",
108+
// array: "files",
109+
// object: [{
110+
// "_id": "",
111+
// "name": "",
112+
// "src": "",
113+
// "host": [
114+
// "*",
115+
// ],
116+
// "directory": "/",
117+
// "path": "",
118+
// "content-type": "",
119+
// "public": "true"
120+
// }]
121+
// }
122+
// }
123123

124-
const htmlAttributesReference = {
125-
"socket-html-attributes": ['broadcast', 'broadcast-sender', 'broadcast-browser', 'namespace', 'room', 'balancer'],
126-
"crud-html-attributes": ['storage', 'database', 'array', 'object', 'key', 'index', 'save', 'read', 'update', 'delete', 'realtime', 'crud', 'upsert', 'value-type', 'value-prefix', 'value-suffix', 'listen'],
127-
"filter-html-attributes": ['filter-selector', 'filter-closest', 'filter-parent', 'filter-previous', 'filter-next', 'filter-key', 'filter-value', 'filter-value-type', 'filter-case-sensitive', 'filter-operator', 'filter-logical-opertor', 'filter-sort-key', 'filter-sort-direction', 'filter-search', 'filter-limit', 'filter-count', 'filter-on'],
128-
"render-html-attributes": ['render', 'render-selector', 'render-closest', 'render-parent', 'render-previous', 'render-next', 'render-as']
129-
}
124+
// const htmlAttributesReference = {
125+
// "socket-html-attributes": ['broadcast', 'broadcast-sender', 'broadcast-browser', 'namespace', 'room', 'balancer'],
126+
// "crud-html-attributes": ['storage', 'database', 'array', 'object', 'key', 'index', 'save', 'read', 'update', 'delete', 'realtime', 'crud', 'upsert', 'value-type', 'value-prefix', 'value-suffix', 'listen'],
127+
// "filter-html-attributes": ['filter-selector', 'filter-closest', 'filter-parent', 'filter-previous', 'filter-next', 'filter-key', 'filter-value', 'filter-value-type', 'filter-case-sensitive', 'filter-operator', 'filter-logical-opertor', 'filter-sort-key', 'filter-sort-direction', 'filter-search', 'filter-limit', 'filter-count', 'filter-on'],
128+
// "render-html-attributes": ['render', 'render-selector', 'render-closest', 'render-parent', 'render-previous', 'render-next', 'render-as']
129+
// }
130130

131-
conversation = [
132-
{ role: 'system', content: 'If the users request seem to want to perform a CRUD operation, return a CoCreateJS CRUD data object as a response. Else reply as best you can to users queries' },
133-
{ role: 'system', content: 'data.method should default to "object.create", "object.read", "object.update", "object.delete"' },
134-
{ role: 'system', content: 'To perform CRUD operations on the objects contained within an array, use the following methods: "object.create" for creating objects, "object.read" for reading and returning one or more objects, "object.update" for updating objects, and "object.delete" for deleting objects. The array property must be defined to perform crud operations on objects' },
135-
{ role: 'system', content: 'data.storage and data.database is not required and should only be defined if the user specifically requests it. example: delete test database from indexeddb storage' },
136-
{ role: 'system', content: 'In the context of CoCreateJS, an "array" corresponds to a "table" in SQL databases or a "collection" in NoSQL databases.' },
137-
{ role: 'system', content: 'In the context of CoCreateJS, an "object" corresponds to a "row" in SQL databases or a "document" in NoSQL databases.' },
138-
{ role: 'system', content: 'crud reference' + JSON.stringify(crudReference) },
139-
{ role: 'system', content: 'crud object reference' + JSON.stringify(crudObjectReference) },
140-
{ role: 'system', content: 'When using object.update or object.delete methods the data.object._id should be defined or a filter used to return and excute on matches' },
141-
{ role: 'system', content: 'file object reference' + JSON.stringify(filterObjectReference) },
142-
{ role: 'system', content: 'If the users request seem to want to create a file or code return the code/source in the data.object.src . This will make the file available over network request using the defined path' },
143-
{ role: 'system', content: 'html attributes reference' + JSON.stringify(htmlAttributesReference) },
144-
{ role: 'system', content: 'component reference' + JSON.stringify(componentsReference) },
131+
// conversation = [
132+
// { role: 'system', content: 'If the users request seem to want to perform a CRUD operation, return a CoCreateJS CRUD data object as a response. Else reply as best you can to users queries' },
133+
// { role: 'system', content: 'data.method should default to "object.create", "object.read", "object.update", "object.delete"' },
134+
// { role: 'system', content: 'To perform CRUD operations on the objects contained within an array, use the following methods: "object.create" for creating objects, "object.read" for reading and returning one or more objects, "object.update" for updating objects, and "object.delete" for deleting objects. The array property must be defined to perform crud operations on objects' },
135+
// { role: 'system', content: 'data.storage and data.database is not required and should only be defined if the user specifically requests it. example: delete test database from indexeddb storage' },
136+
// { role: 'system', content: 'In the context of CoCreateJS, an "array" corresponds to a "table" in SQL databases or a "collection" in NoSQL databases.' },
137+
// { role: 'system', content: 'In the context of CoCreateJS, an "object" corresponds to a "row" in SQL databases or a "document" in NoSQL databases.' },
138+
// { role: 'system', content: 'crud reference' + JSON.stringify(crudReference) },
139+
// { role: 'system', content: 'crud object reference' + JSON.stringify(crudObjectReference) },
140+
// { role: 'system', content: 'When using object.update or object.delete methods the data.object._id should be defined or a filter used to return and excute on matches' },
141+
// { role: 'system', content: 'file object reference' + JSON.stringify(filterObjectReference) },
142+
// { role: 'system', content: 'If the users request seem to want to create a file or code return the code/source in the data.object.src . This will make the file available over network request using the defined path' },
143+
// { role: 'system', content: 'html attributes reference' + JSON.stringify(htmlAttributesReference) },
144+
// { role: 'system', content: 'component reference' + JSON.stringify(componentsReference) },
145145

146-
]
147-
148-
forms.set(form, conversation)
149-
}
146+
// ]
147+
if (!conversation)
148+
forms.set(form, conversation = [])
149+
// }
150150

151151
// 3 types avialable system, user, assistant
152152
for (let element of elements) {
153153
let role = element.getAttribute('openai')
154-
let content
155-
if (element.hasAttribute('crud')) {
156-
// let json = JSON.parse(element.getAttribute('crud'))
157-
// content = await crud.send()
158-
} else {
159-
content = await element.getValue()
154+
if (!['system', 'user', 'assistant'].includes(role))
155+
continue
156+
let content = await element.getValue()
157+
if (typeof content === 'string')
158+
conversation.push({ role, content })
159+
// if (Array.isArray(content))
160+
// conversation.push({ role, content })
161+
if (typeof content === 'object') {
162+
if (content.method) {
163+
let type = content.method.split('.')[0]
164+
for (let i = 0; i < content[type].length; i++) {
165+
if (typeof content[type][i].content === 'string')
166+
conversation.push({ role, content: content[type][i].content })
167+
else
168+
conversation.push({ role, content: JSON.stringify(content[type][i]) })
169+
}
170+
} else
171+
conversation.push({ role, content: JSON.stringify(content) })
160172
}
161173

174+
// if (element.hasAttribute('crud')) {
175+
// // let json = JSON.parse(element.getAttribute('crud'))
176+
// // content = await crud.send()
177+
// } else {
178+
// content = await element.getValue()
179+
// }
180+
162181
// if (role === 'system' && !systemMessages.has(content)) {
163182
// systemMessages.set(content, true)
164183

165-
if (role === 'system') {
166-
conversation.push({ role, content })
184+
// if (role === 'system') {
185+
// conversation.push({ role, content })
167186

168-
// if (content === 'componentsReference')
169-
// conversation.push({ role, content: JSON.stringify(componentsReference) })
170-
// else
171-
// conversation.push({ role, content })
172-
} else if (role === 'user' && content) {
173-
conversation.push({ role, content })
174-
} else if (role === 'message' && content)
175-
conversation.push({ role: 'user', content })
187+
// // if (content === 'componentsReference')
188+
// // conversation.push({ role, content: JSON.stringify(componentsReference) })
189+
// // else
190+
// // conversation.push({ role, content })
191+
// } else if (role === 'user' && content) {
192+
// conversation.push({ role, content })
193+
// } else if (role === 'message' && content)
194+
// conversation.push({ role: 'user', content })
176195
}
177196

178197
if (conversation.length)
@@ -197,10 +216,6 @@ async function sendMessage(messages) {
197216
}),
198217
};
199218

200-
document.dispatchEvent(new CustomEvent('openAi', {
201-
detail: {}
202-
}));
203-
204219
const response = await fetch(apiUrl, requestOptions);
205220
const data = await response.json();
206221

@@ -221,6 +236,10 @@ async function sendMessage(messages) {
221236
// console.error('Invalid CoCreateJS API function:', component, action);
222237
// }
223238
// }
239+
document.dispatchEvent(new CustomEvent('openAi', {
240+
detail: {}
241+
}));
242+
224243
} catch (error) {
225244
console.error('Error:', error);
226245
}

0 commit comments

Comments
 (0)