Git Product home page Git Product logo

b12io / orchestra Goto Github PK

View Code? Open in Web Editor NEW
659.0 50.0 70.0 18.02 MB

Orchestra is a human-in-the-loop AI system for orchestrating project teams of experts and machines.

Home Page: https://orchestra.b12.io/

License: Apache License 2.0

Python 63.83% CSS 3.23% JavaScript 22.66% HTML 6.61% Makefile 0.08% TypeScript 1.34% SCSS 2.24%
human-computer-interaction orchestra expert workflow human-in-the-loop-machine-learning

orchestra's Introduction

Orchestra

PyPI version Documentation status Circle CI Coverage status Apache license Discussion forum

Orchestra is a human-in-the-loop AI system for orchestrating project teams of experts and machines. Projects can include everything from design teams working on a client's project to newsrooms bringing together reporters, photographers, and editors for a story. In Orchestra workflows, you can assign senior experts to review other experts in order to provide feedback and iteratively refine the work. Orchestra also brings machines and automation onto projects: a crawler can collect content from the web before an expert combs through it, or a classifier can filter out bad data so an analyst spends less time in the noise. New workflows can be added with some simple python glue and an html interface.

To learn more about Orchestra with some examples and a getting started guide, or to reach out to the Orchestra team, take a look at some of these resources:

About B12

B12 has open sourced Orchestra as part of our goal to build a brighter future of work.

We are a startup based in NYC that is passionate about improving how people do creative and analytical work. We have a strong team of engineers and designers who have worked extensively on systems that help people work productively online. We believe that the products and experiences we design should be considerate of their greater social context and impact.

Acknowledgements

Thank you to all of the experts who have completed work on early versions of Orchestra to get it where it is today.

A very special thank you to Robert Jördens for generously providing us with the orchestra package name on PyPi.

orchestra's People

Contributors

adbharadwaj avatar bgergen avatar cadaxapy avatar code-review-doctor avatar dastanko avatar derek-schultz avatar devchuk avatar ekratskih avatar elstonayx avatar gitter-badger avatar joshblum avatar jrbotros avatar jumasheff avatar junusheva avatar katelyngray avatar kkamalov avatar lydiagu avatar marcua avatar paopow avatar pavelbastov avatar peterldowns avatar progremir avatar thisisdhaas avatar vhf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

orchestra's Issues

Allow step user interfaces to include SCSS

Right now we use SCSS for Orchestra dashboard/task styling and compile it with (django-libsass)[https://github.com/torchbox/django-libsass], but this functionality isn't currently available for custom step interfaces.

Authentication credentials were not provided

Without sending date header there is an error message about missing date header so I have added the date header in here.

from httpsig.requests_auth import HTTPSignatureAuth
from orch import settings
import requests

auth = HTTPSignatureAuth(key_id='orchestra-user',
                         secret='CHANGEME',
                         algorithm='hmac-sha256')
response = requests.get(
    'http://django.testsite.com:8000/orchestra/api/project/create_project',
    auth=auth,
    headers={"date": "10 29 2015"}
)

print(response.text)

This is returning

{"detail":"Authentication credentials were not provided."}

Also is there a way to change the authentication system for this so that I can use it without http signature?

Add a ModalService

We use modals in Angular a lot---consider replacing boilerplate with a service.

Angular template caching can be stubborn

Even a hard refresh sometimes does not refresh angular templates, especially if they are not loaded before the user refreshes the page. It is possible to use some grunt tasks to resolve this.

grunt-angular-templates concatenates all templates into a single js file. This is great as it prevents a delay as an ng-include tries to load a template on the fly and it also prevents selective caching of only some templates.

grunt-assets-versioning can prevent the caching of js (and other) files by automatically versioning the file names.

Create a management command to copy workflows

strawman: this command can update all of the workflow data (js, css, json) to point to the new version tag. Users may then add to the new workflow without a manual find & replace

Fix concurrency issues caused by Postgres' READ COMMIT default isolation level

Sending API requests to submit_task followed by save_task caused a malformed task state in which the task was marked as COMPLETE but the task assignment was overwritten as PROCESSING by the save function. In fact, all task assignment fields are overwritten to the values they had previous to the submit_task and save_task fields. Using select_from_update fixed the issue in this case, as selecting for update signals to Postgres to lock on the read rather than allow other read transactions to proceed. More broadly, however, we have not isolated other transactions, and might want to consider setting the db isolation level to SERIALIZABLE as per the Django docs.

Remove Slack username support

Slack has deprecated usernames.

For Slack support in Orchestra, we already store user_ids, which aren't going away. We do, however, get that user_id by asking for a Slack username, which has been phased out. We should either ask for the user_id directly in account settings (it's accessible from the profile dropdown in Slack), or by searching for the user's display name.

Remove `settings.PRODUCTION/STAGING` dependencies

orchestra/views.py and orchestra/utils/machine_step_scheduler.py refer to settings.PRODUCTION and settings.STAGING These should be replaced by variables with semantically meaningful names, like settings.ORCHESTRA_IMAGE_UPLOAD_PREFIX.

Improve the Journalism Example

This should be made better over time. Current wishlist items include:

  • Rip out the 'editor' form as a single angular directive to be more DRY
  • Make the photo_adjustment step more realistic:
    • More realistic operations, e.g. rescaling/recoloring/thumbnails
    • More realistic workflow, e.g. creating multiple copies of each image and having the copy-editor
      caption the thumbnails
    • Write tests for the new google apps convenience/service methods (convenience.upload_file, convenience.download_file, service.list_folder, service.get_file_content)

User interface to build workflows

Right now you have to be a developer to describe an Orchestra workflow. The Flash Teams work, and more specifically, Foundry show that it's possible for end-users to utilize a Gantt chart-like interface for describing workflows and step dependencies. For this to work in Orchestra, I'd imagine a few phases:

  • Create a workflow description language that's not in Python, say in JSON or a DSL.
  • Move workflows out of code and into the database with versions, so that we don't have to commit new code to update workflows
  • Create a Gantt chart-like interface for describing workflows. If we can team up with the Foundry team to do this, all the better!

Task/Project completion state

  • If we complete and skip a task, it should have a COMPLETED_AND_SKIPPED state
  • If we complete a project, it should have a COMPLETED state

Cannot install

==> default: Cleaning up...
==> default: Downloading/unpacking orchestra
==> default:   Running setup.py (path:/tmp/pip_build_root/orchestra/setup.py) egg_info for package orchestra
==> default:     Traceback (most recent call last):
==> default:       File "<string>", line 17, in <module>
==> default:       File "/tmp/pip_build_root/orchestra/setup.py", line 3, in <module>
==> default:         from release import get_version
==> default:     ImportError: No module named 'release'
==> default:     Complete output from command python setup.py egg_info:
==> default:     Traceback (most recent call last):
==> default: 
==> default:   File "<string>", line 17, in <module>
==> default: 
==> default:   File "/tmp/pip_build_root/orchestra/setup.py", line 3, in <module>
==> default: 
==> default:     from release import get_version
==> default: 
==> default: ImportError: No module named 'release'
==> default: 
==> default: ----------------------------------------
==> default: Cleaning up...
==> default: Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_root/orchestra
==> default: Storing debug log for failure in /root/.pip/pip.log

Better expert modeling

The Argonaut paper describes some simple ways to model a worker's aggregate work quality based on the results of several reviews. I'd imagine that as you focus on higher-level expertise, this problem becomes harder.

Refactor iteration code

Issues with our current latency code:

  • For tasks awaiting a new assignment, doesn't include an iteration 0 specifying how long they've been waiting
  • For assignments in progress, doesn't include an row specifying how long they've been working on the current iteration
  • The complete_tasks_only flag is out of place—latency code should analyze finalized data

Proposed solutions

  • Create "empty" assignments for tasks awaiting a new assignment, to which an iteration 0 will belong
  • Create an Iteration model to simplify logic
  • Create a global project data module; latency code should remove incomplete tasks and assignments

More complex review policies

We currently only support a review policy with a global sampling rate for all tasks of a particular type. Others will inevitably be useful:

  • A per-user, per-task sampling rate. For example, Bob should be reviewed for photography tasks at a rate of 75%, whereas Alice should be reviewed at a rate of 25%.
  • An Argonaut-style model-based review, where a model can determine which tasks will benefit from another level of review.

PerformanceController missing

screen shot 2016-03-24 at 10 58 57

The controller PerformanceController is referenced in orchestra/static/orchestra/common/js/orchestra.routes.js but never defined

Use safe json decoding method throughout

Function is at orchestra.utils.load_json and will catch json/decoding errors. This method should replace any manual calls to json.loads(x.decode()) so we catch any errors

Reorganize top-level directories

simple_workflow and journalism_workflow should live in either a top level orchestra_examples/ folder or in orchestra/examples/

beanstalk_dispatch should either live inside orchestra/ or be a different repository entirely.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.