https://github.com/nodegame/nodegame-mturk
An interactive console to handle operations with Amazon Mechanical Turk (AMT).
https://github.com/nodegame/nodegame-mturk
amazon amt api bonus experiment hit mturk nodegame payment qualification
Last synced: 6 months ago
JSON representation
An interactive console to handle operations with Amazon Mechanical Turk (AMT).
- Host: GitHub
- URL: https://github.com/nodegame/nodegame-mturk
- Owner: nodeGame
- License: mit
- Created: 2016-08-02T18:20:33.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2023-09-21T14:54:05.000Z (over 1 year ago)
- Last Synced: 2024-09-15T05:25:29.539Z (8 months ago)
- Topics: amazon, amt, api, bonus, experiment, hit, mturk, nodegame, payment, qualification
- Language: JavaScript
- Homepage: http://nodegame.org
- Size: 337 KB
- Stars: 2
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
# nodegame-mturk
Handles operations with Amazon Mechanical Turk (MTurk), such as approve/reject
HITS, grant bonuses, assign qualifications, etc.## Decription
It can be used as an interactive console or can be called programmatically.
As an interactive console, it can operate in two modes:
- **standalone mode**: import a compatible results file from MTurk;
- **nodeGame mode**: automatically scan the data folder of a nodeGame game
and import all results files found.## Installation
- **Stable**:
```
npm install nodegame-mturk
```- **Development**:
```
git clone https://github.com/nodeGame/nodegame-mturk.git
cd nodegame-mturk
npm install
```## Configuration
Create file `conf/mturk.conf.js` using the template in the same
directory.Add your Amazon Web Service (AWS) Keys in the conf file:
- **accessKeyId**: 'XXX',
- **secretAccessKey**: 'YYY'
If you do not have your keys yet, please read
[here](https://aws.amazon.com/kms/) and [here](https://console.aws.amazon.com/).### Optional Configuration Settings
- **region**: the AWS server you want to connect to. Default: 'us-east-1'.
- **nodeGamePath**: the absolute path, or relative path from the root folder of
the nodegame-mturk directory, to a nodeGame installation directory. Needed only
if you want to automatically import results files from nodeGame.- **fields**: object specifiying the names of the fields for
non-standard results files (Important! MTurk default separator is ;).- **filter**: a function to filter items before importing them: must
return falsy to skip, or truthy to keep. Default: items are
skipped if `type` is equal to 'bot' or if 'skip' is truthy.- **autoApprove**: A boolean flag specifying to auto-approve all
imported assignments. Default: false.- **maxBonus**: maximum bonus payable, an error will be raised
otherwise. Default: 10USD.- **minBonus**: minimum bonus payable, an error will be raised
otherwise. Default: 0USD.- **autoApprove**: A boolean flag specifying to auto-approve all
imported assignments. Default: false.- **sandbox**: Operates in sandbox mode. Default: false
More options available directly in the configuration file.
## Usage
### Launch the program
Start the program from the command line:
node ng-amt.js
These are the main inline options to use when you start the program
(the short and long form of each command are equivalent).**-c, --connect**: Opens the connection with MTurk Server
**-r, --resultsFile **: Path to a results file with Exit and Access Codes
**-g, --game [minRoom-maxRoom]**: Path to a nodeGame game and optional room boundaries
**-Q, --getQualificationTypeId**: Fetches the last qualification type owned by requester
**-H, --getLastHITId**: Fetches the id of the latest HIT
**-s, --sandbox**: Activate sandbox mode
**-h, --help**: Output usage information
#### Other inline options
**-C, --config **: Specifies a configuration file
**-i, --inputCodesFile **: Path to a codes file with Exit and Access Codes
**-t, --token [token]**: Unique token for one-time operations
**-d, --dry**: Dry-run: does not actually send any request to server
**-n, --nRetries **: How many times a request is repeated in case of error (Def: 0)
**-l, --retryInterval **: Milliseconds to wait before a request is repeated (Def: 10000)
**-o, --throttleInterval **: Milliseconds between two consecutive requests (Def: 500)
**-q, --quiet**: No/minimal output printed to console
### Interactive Prompt
After the you started the program, you have access to the interactive
console with the following commands:**connect**: Creates the AWS client.
**uploadResults [options]**: Uploads the results to AMT server (approval+bonus+qualification).
**grantBonus [options]**: Grants bonuses as specified in results codes.
**assignQualification [options]**: Assigns a Qualification to all results codes.
**get **: Fetches and stores the requested info.
**load [options] **: Loads a file.
**show [options] **: Prints out the requested info.
**extendHIT [options]**: Extends the HIT.
**expireHIT**: Expires the HIT.
**help [command...]**: Provides help for a given command.
**exit**: Exits application.
Use TAB to autocomplete commands and options.
## Examples
- **Start the program with initial options**
Here we load a results file, retrieve the last HIT Id and last
Qualification Id.```bash
$ node ng-amt -r path/to/results/file.csv -H -Qinfo: sandbox-mode: on
info: results file: path/to/results/file.csv
info: validation level: 2
info: result codes: 9
info: creating mturk client...
info: done.
info: retrieved QualificationTypeId: XXXXXXXXXXXXXXXXXXX ("My Qualification")
info: retrieved last HIT id: YYYYYYYYYYYYYYYYYYY ("My Task Name")
```
- **Show a summary**```bash
ng-amt~$ show Summary
info: **** Results ****
info: tot results: 9
info: to approve: 7
info: to reject: 2info: **** Bonus ****
info: bonuses: 7
info: bonuses tot: 29.75
info: bonuses mean: 3.31
info: bonuses std: 0.55
info: bonuses min: 2.39
info: bonuses max: 4.06info: **** Qualification ****
info: qualifications: 0info: **** Balance ****
info: Your balance is: $1,000
```- **Approve/Reject results**
```bash
ng-amt$ uploadResults
info: tot results: 9
info: to approve: 9
info: to reject: 0info: results processed: 9/9
info: approved: 7
info: rejected: 2
error: approve/reject failed: 0info: Original balance: $1,000 New balance: $993 (diff: 7)
```- **Grant a Bonus**
```bash
ng-amt$ grantBonus -r "Thank You"
```The reason (option -r) is required.
- **Assign a Qualification**
```bash
ng-amt$ assignQualification -i 1
```The option -i is required. It assigns an integer value for the
qualification. Any positive value can be specified. You can use
different values to differentiate between participants with the same
qualifications.- **Get HIT Id**
```bash
ng-amt$ get HITId
info: retrieved last HIT id: ****************AADIVNV ("Name of the HIT")
ng-amt$ get HITStatus
info: **** HIT Status ****
info: id: ****************AADIVNV
info: status: NotReviewed
info: pending ass: 0
info: available ass: 49
info: completed ass: 0
info: expiration: Tue Feb 14 2017 10:38:04 GMT-0500 (EST)
info: annotation: BatchId:***641;OriginalHitTemplateId:****37243;
```The command above returns the last created HIT. If your HIT is not the
last one, you can search through the list of 10 most recent HITs.```bash
ng-amt$ get HITIdList
? Select a HIT
1) 7/20/2019 - ***********************YYNG27N Label Tweets ($1.00)
2) 7/20/2019 - ***********************JS8T6I3 Ultimatum Game ($1.00)
3) 7/19/2019 - ***********************UC8RXR8 Prisoner Dilemma ($3.00)
4) 7/18/2019 - ***********************0IBHN5N Understanding Others ($0.85)
5) 7/12/2019 - ***********************Z82S7GA Tell a joke ($0.25)
6) 7/11/2019 - ***********************FCXM1KN Estimating product preferences ($1.00)
(Move up and down to reveal more choices)
Answer:
```- **Get Qualification Id**
```bash
ng-amt$ get QualificationTypeId
info: set QualificationTypeId: ***************WZ8QQ6QO ("my_qualification")
```The command above returns the last qualification. You can search through the
list of the 10 most recent Qualifications.```bash
ng-amt$ get QualificationTypeIdList
? Select a QualificationType
1) 4/20/2019 my_qualification
2) 11/20/2018 another_qualification
3) 8/7/2018 what_is_this_for
4) 7/4/2018 you_made_it
5) 6/4/2018 you_are_definitely_qualified
6) 6/3/2018 you_are_unqualifiable
(Move up and down to reveal more choices)
Answer:
```If you still do not find it, you can add a search query.
```bash
ng-amt$ get QualificationTypeIdList -s Finished
? Select a QualificationType
1) 7/21/2017 Finished_my_study
Answer:
```- **Get the Status of a running HIT**
```bash
ng-amt$ get HITStatus
info: **** HIT Status ****
info: id: ****************AADIVNV
info: status: NotReviewed
info: pending ass: 0
info: available ass: 49
info: completed ass: 0
info: expiration: Tue Feb 14 2017 10:38:04 GMT-0500 (EST)
info: annotation: BatchId:***641;OriginalHitTemplateId:****37243;
```- **Load all results from nodeGame**
```bash
ng-amt$ load Game mygame -l 60-61info: loading rooms of game mygame
info: scanning data folder minRoom=60 maxRoom=61
warn: no results in room room000060
info: loading results file: room000061
info: results file: C:\Users\me\nodegame-v5.0.0-dev\games\mygame\data\room000061\bonus.csv
info: result codes: 1
```The commands looks for files saved as `bonus.csv`, `results.csv`, or
`codes.csv` in each directory and loads them.## Use programmatically
```javascript
// Require ngmt.
var ngmt = require('nodegame-mturk')();
// Or with a custom config file
// var ngmt = require('nodegame-mturk')({ config: 'path/to/config.js' });// Connect, fetch last HIT Id (async), and then assign it to a worker.
ngmt.api.connect({ getLastHITId: true }, function() {
ngmt.modules.qualification.assign({
WorkerId: XXXXXXXXX',
QualificationTypeId: ngmt.config.qualificationId,
IntegerValue: 1
});
});
```## License
[MIT](LICENSE)