For more information on who / what Alice is, her architecture, strategic principles, and conceptual foundations, please reference the tutorial series on how we built her and how you can extend her: Rolling Alice: Architecting Alice: Introduction and Context.
Alice is a work in progress. Here is the most recent 5 minute Status Update which covers what Alice is for the uninitiatied, where are we progress wise, and how to get involved.
Our goal is to achieve the fully connected development model, in which AI driven feedback helps us understand our work, how it relates to other's work, and how we can most effectively collaborate.
To enter the fully connected development model we must hit critical velocity. Critical velocity is the maximum throughput of changes meeting our bar for high quality given the assets at our disposal (contributors, compute, etc.). Alice, our AI, will help us hit critical velocity. She sits at the intesection of the software / entity analysis trinity to identifify patterns which help us most effectively communicate so as to reach critical velocity.
We require you have git
and gh
(https://cli.github.com/)
installed.
Alice currently supports Python 3.9 on Linux. If your distribution's package manager doesn't provide Python 3.9, pyenv is another good way to install it. You could also use the docker container.
Windows and MacOS are not officially supported yet. Support varies by which plugins you install. We do not currently have a list of what is supported and what is not supported on those OSs. Most things should work. However, until we are testing for everything we won't declare them to be officially supported. Please create issues for any problems you encounter.
First make sure you have the latest versions of pip
, setuptools
, and
wheel
. Some ML libraries require them to be up-to-date.
If you want to contribute please see https://github.com/intel/dffml/blob/main/entities/alice/CONTRIBUTING.rst
You may want to first create a virtual environment to avoid any permissions
issues when running pip install
.
.. tabs:: .. group-tab:: Linux and MacOS .. code-block:: console $ python -m venv .venv $ . .venv/bin/activate $ python -m pip install -U pip setuptools wheel .. group-tab:: Windows .. code-block:: console C:\Users\username> python -m venv .venv C:\Users\username> .venv\Scripts\activate (.venv) C:\Users\username> python -m pip install -U pip setuptools wheel
Warning
Make sure that if pip is complaining that directories are not in your
PATH
, that you add those directories to your PATH
environment
variable!.
Install latest known working version
$ export ALICE_STATE_OF_ART=98335d941116e76bbf4e07422adc2b5061e47934
$ python -m pip install \
"https://github.com/intel/dffml/archive/${ALICE_STATE_OF_ART}.zip#egg=dffml" \
"https://github.com/intel/dffml/archive/${ALICE_STATE_OF_ART}.zip#egg=dffml-feature-git&subdirectory=feature/git" \
"https://github.com/intel/dffml/archive/${ALICE_STATE_OF_ART}.zip#egg=shouldi&subdirectory=examples/shouldi" \
"https://github.com/intel/dffml/archive/${ALICE_STATE_OF_ART}.zip#egg=dffml-config-yaml&subdirectory=configloader/yaml" \
"https://github.com/intel/dffml/archive/${ALICE_STATE_OF_ART}.zip#egg=dffml-operations-innersource&subdirectory=operations/innersource" \
"https://github.com/intel/dffml/archive/${ALICE_STATE_OF_ART}.zip#egg=alice&subdirectory=entities/alice"
Note
Add -log debug
to any alice
CLI command to get verbose log output.
Alice will be working on our repos with us, we are going to use the please
contribute
set of commands (we'll overlay to alice.please.contribute
).
Note
Tutorial on how we made this: https://github.com/intel/dffml/blob/main/docs/tutorials/rolling_alice/0001_coach_alice/0002_our_open_source_guide.md
Create a new git repo and add some contents
$ gh repo create -y --private https://github.com/$USER/my-new-python-project
$ git clone https://github.com/$USER/my-new-python-project
$ cd my-new-python-project
$ echo 'print("Hello World")' > test.py
$ git add test.py
$ git commit -sam 'Initial Commit'
$ git push --set-upstream origin $(git name-rev @{u} | awk '{print $2}')
Ask Alice: please contribute recommended community standards to the repo
$ alice please log todos -keys https://github.com/$USER/my-new-python-project -log debug -- recommended community standards
Visit https://github.com/$USER/my-new-python-project/issues
Merge pull request with README. Now the new project has a README!
TODO Link to docs on how to extend for org specific custom README templates.
Same as please contribute recommended community standards to the repo, only don't create PR.
Note
We have an open issue with subflows? Or some reason duplicate issues are sometimes being created.
$ alice please log todos -keys https://github.com/$USER/my-new-python-project
Note
Tutorial on how we made this: https://github.com/intel/dffml/blob/main/docs/tutorials/rolling_alice/0001_coach_alice/0001_down_the_dependency_rabbit_hole_again.md
Alice's initial functionality is based around https://intel.github.io/dffml/main/shouldi.html
We provide Alice specific overlays (covered in https://intel.github.io/dffml/main/examples/dataflows.html) which enable Alice to provide us with additional information on top of what shouldi already gives us.
We can also apply organizational policies to our Alice via the overlay infrastructure.
Check if a Python package is something you should install and use from security perspective (aka does it have any CVEs).
$ alice shouldi use httptest
httptest is okay to install
Example CLI invocation asking Alice if we should reuse a git repo as a dependency.
$ alice shouldi reuse https://github.com/trekhleb/javascript-algorithms
The response should be similar to the following
{
"https://github.com/trekhleb/javascript-algorithms": {
"static_analysis": [
{
"critical": 1,
"high": 1,
"low": 0,
"medium": 0,
"report": {
"npm_audit_output": {
"critical": 1,
"high": 1,
"info": 0,
"low": 0,
"moderate": 0,
"total": 2
}
}
}
]
}
}
Let's ask Alice about a repo to see what she knows about the health of it and it's community. This will help us make an informed decision as to if we should contribute.
With overlays, Alice will be able to tell us if our experience / skill set seems helpful to contribute to open issues.
Her analysis of the project will also let us know they are ready for us to contribute (are they too backlogged, to they not have governance or contributing docs).
$ alice shouldi contribute -keys https://github.com/trekhleb/javascript-algorithms
The response should be similar to the following
[
{
"extra": {},
"features": {
"author_line_count": [
{
"Oleksii Trekhleb": 7
},
{
"0xFF": 1,
"Aldo Salas": 17,
"Anton Kazarinov": 1,
"Antonio Gonzalez Capel": 4,
"Bravo Yeung": 1,
"DS Park": 75,
"Dar\u00edo Here\u00f1\u00fa": 2,
"Elif": 20,
"Felipe Veronezi Peters": 71,
"G\u00e9rley Adriano": 3,
"H2rmone": 1,
"Halil CAKAR": 1,
"Hyewon Kwak": 1,
"Israel Teneda": 5,
"Kim Chan": 1,
"Kirill Skvortsov": 49,
"Kush Gabani": 2,
"Lucas De Angelis": 24,
"Marcio Flavio": 1,
"Matheus Machado": 54,
"MrBrain295": 1,
"Muhammad Affandes": 2,
"Muhammed Erdin\u00e7": 199,
"Oleksii Trekhleb": 1591,
"OscarRG": 11,
"Perry": 3,
"Piotr \u0141ysik": 1,
"Rafael Ara\u00fajo": 36,
"Samay Sagar": 2,
"Sewook Han": 40,
"Seymur": 2,
"Suman kumar": 0,
"TheJang": 1,
"Trang Nguyen": 343,
"William Joao Cubillos Quintero": 1,
"edegil": 26,
"ilkererkek": 21,
"jackbyebye1024": 4,
"joaojgabriel": 4,
"kimzerovirus": 25,
"kyong4": 2,
"liamlylehr": 57,
"m11o": 1,
"observer.js": 36,
"qiugu": 49,
"rmagillxyz": 9,
"szhou": 1,
"tusba": 7,
"\u513f\u65f6": 73,
"\uc11c\ub2e4\uc194": 37
},
{
"Oleksii Trekhleb": 2861
},
{
"Oleksii Trekhleb": 457
},
{
"Coco Guerra": 20,
"CodingInvoker": 1,
"Deniz Binay": 363,
"Freivin Campbell": 102,
"Oleksii Trekhleb": 2945,
"justforever": 1
},
{
"Abdessamad Bensaad": 326,
"Adjie Djaka Permana": 303,
"Alexander Belov": 0,
"Andy Chen": 0,
"Anmol Gomra": 119,
"Askhat Arslanov": 23,
"Austin Theriot": 37,
"Avi Agrawal": 299,
"Brandon Villa": 1,
"Brian Tomlin": 1,
"Donghoon Song": 149,
"Eugene Sinitsyn": 1,
"Go": 1,
"Hanseung Yoo": 108,
"JD Medina": 22,
"Javier Savi\u00f1on": 164,
"Jos\u00e9 Vin\u00edcius Lacerda de Arruda": 16,
"Jo\u00e3o Pedro Raskopf": 262,
"Kirill Kazakov": 303,
"Luan Caldas": 6,
"Matheus Bonavite dos Reis Cardoso": 52,
"Oleg Maslov": 23,
"Oleksii Trekhleb": 6202,
"Riccardo Amadio": 294,
"Rodrigo Stuani": 1,
"Sagid M": 1,
"Sherlyn": 120,
"Xiaoming Fu": 1,
"Yanina Trekhleb": 328,
"Yura Sherman": 1,
"bhaltair": 1,
"deepthan": 1,
"dependabot[bot]": 6,
"lvzhenbang": 1,
"vladimirschneider": 1,
"\u8463\u51ef": 302
},
{
"Alexey Onikov": 5,
"Aykut": 317,
"Louis Aeilot": 4,
"Lo\u00efc TRUCHOT": 1201,
"Ly": 3,
"Oleg Khobotov": 1,
"Oleksii Trekhleb": 27
},
{
"Boardens": 135,
"Chao Zhang": 2,
"Ly": 1,
"Marcelo-Rodrigues": 10,
"Oleksii Trekhleb": 8542,
"Suraj Jadhav": 3,
"Thiago Alberto da Silva": 1,
"Yong Yang": 1,
"gifted-s": 72,
"solomon-han": 1,
"vladimirschneider": 1
},
{},
{
"Oleksii Trekhleb": 2
}
],
"authors": [
1,
50,
1,
1,
6,
36,
7,
11,
0,
1
],
"commit_count": [
4,
66,
6,
7,
16,
106,
9,
28,
0,
1
],
"commit_shas": [
"cb7afe18ef003995d8e23cc0b179ee7e37e8a19e",
"7a37a6b86e76ee22bf93ffd9d01d7acfd79d0714",
"9bb60fa72f9d146e931b4634764dff7aebc7c1a2",
"4548296affb227c29ead868309e48667f8280c55",
"6d2d8c9379873d0da2b1262a14dd26d0f9779522",
"83357075c4698f487af733e6e0bf9567ba94c266",
"ed52a8079e1ad3569782aa9a7cd1fa829d041022",
"929b210b8e02cd77bdc3575a4e897ad24ad64ad3",
"ba2d8dc4a8e27659c1420fe52390cb7981df4a94",
"ba2d8dc4a8e27659c1420fe52390cb7981df4a94"
],
"dffml_operations_innersource.operations:github_workflow_present.outputs.result": [
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
],
"language_to_comment_ratio": [
9,
9,
9,
9,
9,
9,
9,
9,
9,
9
],
"lines_by_language_count": [
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
},
{
"javascript": {
"blanks": 3476,
"code": 14025,
"comment": 4140,
"files": 330,
"lines": 21641
},
"json": {
"blanks": 0,
"code": 9607,
"comment": 0,
"files": 2,
"lines": 9607
},
"markdown": {
"blanks": 0,
"code": 15813,
"comment": 0,
"files": 191,
"lines": 15813
},
"sum": {
"blanks": 3476,
"code": 39445,
"comment": 4140,
"files": 523,
"lines": 47061
}
}
],
"release_within_period": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"work": [
0,
68,
0,
0,
25,
56,
36,
5,
0,
0
]
},
"key": "https://github.com/trekhleb/javascript-algorithms",
"last_updated": "2022-05-20T08:41:16Z"
}
]