File size: 3,489 Bytes
ceb472c
 
4189f9e
 
8993dbb
4189f9e
 
ceb472c
4fbd4b0
2e70fd3
4fbd4b0
4189f9e
ceb472c
eb800fb
2988cff
 
ceb472c
6ff171e
eb800fb
855a94a
ceb472c
6ff171e
e659e75
 
 
 
6ff171e
e659e75
2988cff
e659e75
4189f9e
2988cff
 
e659e75
 
6ff171e
855a94a
ceb472c
 
eb800fb
 
ceb472c
eb800fb
 
 
60949e3
eb800fb
9f84ffb
eb800fb
 
ceb472c
90bf77f
60949e3
 
 
 
 
 
 
 
227827f
60949e3
 
 
 
 
 
 
 
227827f
8448a0a
 
60949e3
 
 
4fbd4b0
e659e75
 
 
 
 
 
60949e3
 
aa87ec6
60949e3
 
 
e37c55c
2988cff
 
4fbd4b0
e37c55c
4fbd4b0
 
 
 
 
 
514097e
 
 
4fbd4b0
 
 
 
60949e3
2e68462
2988cff
 
 
83049d3
2988cff
 
8448a0a
2988cff
 
227827f
2988cff
 
 
90bf77f
2e68462
60949e3
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

// IMPORT LIBRARIES TOOLS
import { pipeline, env } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers@2.10.1';

// skip local model check
env.allowLocalModels = false;

// GLOBAL VARIABLES
let PROMPT_INPUT = `Happy people don't [MASK]` // a field for writing or changing a text value
let OUTPUT_LIST = [] // a blank array to store the results from the model
let pField

// RUN MODEL
async function fillInTask(input){
  console.log('fill-in task initiated')

  const pipe = await pipeline('fill-mask', 'Xenova/bert-base-uncased');
  
  var out = await pipe(input);

  console.log(await out) // yields { score, sequence, token, token_str } for each result
  
  // await out.forEach(o => {
  //   console.log(o) // yields { score, sequence, token, token_str } for each result
  //   OUTPUT_LIST.push(o.sequence) // put only the full sequence in a list
  // })
  
  // console.log(await OUTPUT_LIST)

  // displayResults(await OUTPUT_LIST)

  console.log('fill-in task completed')

  return await out
  // return await OUTPUT_LIST
}

// PROCESS MODEL OUTPUT
// a generic function to pass in different model task functions
async function getOutputs(task){
  let output = await task

  await output.forEach(o => {
    OUTPUT_LIST.push(o.sequence) // put only the full sequence in a list
  })

  console.log(OUTPUT_LIST)

  return await OUTPUT_LIST
}

// await getOutputs(fillInTask()) // getOutputs will later connect to the interface to display results


//// p5.js Instance

new p5(function (p5){
  p5.setup = function(){
      p5.noCanvas()
      console.log('p5 instance loaded')
      makeTextDisplay()
      makeFields()
      makeButtons()
    }

  p5.draw = function(){
      // 
  }

  function makeTextDisplay(){
    let title = p5.createElement('h1','p5.js Critical AI Prompt Battle')
    let intro = p5.createP(`This tool lets you run several AI chat prompts at once and compare their results. Use it to explore what models 'know' about various concepts, communities, and cultures. For more information on prompt programming and critical AI, see [Tutorial & extra info][TO-DO][XXX]`)
  }

  function makeFields(){
    pField = p5.createInput(PROMPT_INPUT) // turns the string into an input; now access the text via PROMPT_INPUT.value()
    pField.size(700)
    pField.attribute('label', `Write a text prompt with at least one [MASK] that the model will fill in.`)
    p5.createP(pField.attribute('label'))
    pField.addClass("prompt")
    pField.value(PROMPT_INPUT)
    console.log(pField.value())
  }

  function makeButtons(){
    let submitButton = p5.createButton("SUBMIT")
    submitButton.size(170)
    submitButton.class('submit')
    submitButton.mousePressed(displayResults)
  }

  async function displayResults(){
    console.log('displayed, pressed')

    // PROMPT_INPUT = pField.value()

    let fillIn = await fillInTask(PROMPT_INPUT)

    let outs = await getOutputs(fillIn)

    console.log(outs)
  
    // text = str(outs)
    // let outHeader = p5.createElement('h3',"Results") 
    // let outText = p5.createP('')
    // await outText.html(text)
  }

  // async function makeOutputDisplay(){
  //   console.log('button pressed')
  //   let outHead = p5.createElement('h4',"Results:")

  //   let out = await fillInTask() //just model no parsing
  //   // let out = await getOutputs(fillInTask()) // model and parsing

  //   out = str(await out)
  //   console.log(out)
    
  //   let outText = p5.createP('')
  //   await outText.html(out)
  // }

});