droidrun 0.3.2__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- droidrun-0.3.4/.github/workflows/bounty.yml +134 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/.github/workflows/publish.yml +2 -1
- {droidrun-0.3.2 → droidrun-0.3.4}/.gitignore +5 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/PKG-INFO +20 -8
- {droidrun-0.3.2 → droidrun-0.3.4}/README.md +16 -6
- droidrun-0.3.4/docs/.generated-files.txt +4 -0
- droidrun-0.3.4/docs/docs.json +146 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/agent.mdx +2 -1
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/android-tools.mdx +6 -6
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/models.mdx +4 -2
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/gemini.mdx +1 -1
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/ollama.mdx +8 -4
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/openailike.mdx +1 -1
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/quickstart.mdx +1 -1
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/adb-tools.mdx +119 -24
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/base-tools.mdx +44 -13
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/droid-agent.mdx +7 -2
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/ios-tools.mdx +39 -36
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/__init__.py +6 -2
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/codeact_agent.py +20 -14
- droidrun-0.3.4/droidrun/agent/common/events.py +47 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/__init__.py +2 -0
- droidrun-0.3.4/droidrun/agent/context/personas/big_agent.py +96 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/ui_expert.py +1 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/task_manager.py +8 -3
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/droid/droid_agent.py +50 -16
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/droid/events.py +1 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/planner_agent.py +19 -14
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/chat_utils.py +1 -1
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/executer.py +17 -1
- droidrun-0.3.4/droidrun/agent/utils/trajectory.py +431 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/cli/main.py +108 -44
- droidrun-0.3.4/droidrun/macro/__init__.py +14 -0
- droidrun-0.3.4/droidrun/macro/__main__.py +10 -0
- droidrun-0.3.4/droidrun/macro/cli.py +228 -0
- droidrun-0.3.4/droidrun/macro/replay.py +309 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/portal.py +37 -22
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/telemetry/events.py +1 -1
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/telemetry/tracker.py +3 -2
- droidrun-0.3.4/droidrun/tools/adb.py +1127 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/tools/ios.py +163 -163
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/tools/tools.py +60 -14
- {droidrun-0.3.2 → droidrun-0.3.4}/pyproject.toml +20 -32
- droidrun-0.3.2/docs/.generated-files.txt +0 -5
- droidrun-0.3.2/docs/docs.json +0 -133
- droidrun-0.3.2/docs/v3/sdk/adb-utils.mdx +0 -399
- droidrun-0.3.2/droidrun/adb/__init__.py +0 -13
- droidrun-0.3.2/droidrun/adb/device.py +0 -345
- droidrun-0.3.2/droidrun/adb/manager.py +0 -93
- droidrun-0.3.2/droidrun/adb/wrapper.py +0 -226
- droidrun-0.3.2/droidrun/agent/common/events.py +0 -4
- droidrun-0.3.2/droidrun/agent/utils/trajectory.py +0 -184
- droidrun-0.3.2/droidrun/tools/adb.py +0 -671
- {droidrun-0.3.2 → droidrun-0.3.4}/CHANGELOG.md +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/CONTRIBUTING.md +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/LICENSE +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/MANIFEST.in +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/favicon.png +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/logo/dark.svg +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/logo/light.svg +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/concepts/agent.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/concepts/android-control.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/concepts/portal-app.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/overview.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/quickstart.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/agent.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/android-control.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/planning.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/portal-app.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/tracing.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/overview.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/quickstart.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/portal-app.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/cli.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/overview.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/telemetry.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/images/portal_apk.png +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/overview.mdx +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/__main__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/events.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/prompts.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/common/default.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/agent_persona.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/context_injection_manager.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/episodic_memory.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/app_starter.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/default.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/reflection.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/droid/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/oneflows/reflector.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/events.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/prompts.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/async_utils.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/llm_picker.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/cli/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/cli/logs.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/telemetry/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/tools/__init__.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/gen-docs-sdk-ref.sh +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/setup.py +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/static/droidrun-dark.png +0 -0
- {droidrun-0.3.2 → droidrun-0.3.4}/static/droidrun.png +0 -0
@@ -0,0 +1,134 @@
|
|
1
|
+
name: "Project V2: Status ← issue label"
|
2
|
+
|
3
|
+
on:
|
4
|
+
issues:
|
5
|
+
types: [labeled]
|
6
|
+
|
7
|
+
env:
|
8
|
+
ORG: droidrun
|
9
|
+
PROJECT_NUMBER: 2
|
10
|
+
PROJECT_TOKEN: ${{ secrets.BOUNTY_SECRET }}
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
update_status:
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
steps:
|
16
|
+
|
17
|
+
- name: Fetch project & field metadata
|
18
|
+
id: metadata
|
19
|
+
env:
|
20
|
+
GH_TOKEN: ${{ env.PROJECT_TOKEN }}
|
21
|
+
run: |
|
22
|
+
# 1) Query projectV2 ID and the Status field + its options
|
23
|
+
gh api graphql -f query='
|
24
|
+
query($org:String!,$num:Int!){
|
25
|
+
organization(login:$org){
|
26
|
+
projectV2(number:$num){
|
27
|
+
id
|
28
|
+
fields(first:20){
|
29
|
+
nodes{
|
30
|
+
... on ProjectV2SingleSelectField{
|
31
|
+
id
|
32
|
+
name
|
33
|
+
options { id name }
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}' \
|
40
|
+
-f org="${ORG}" -F num=${PROJECT_NUMBER} \
|
41
|
+
--jq '
|
42
|
+
.data.organization.projectV2 as $p |
|
43
|
+
($p.id) as $projId |
|
44
|
+
($p.fields.nodes[] | select(.name=="Status")) as $f |
|
45
|
+
{
|
46
|
+
projectId: $projId,
|
47
|
+
statusFieldId: $f.id,
|
48
|
+
options: ($f.options | map({(.name): .id}) | add)
|
49
|
+
}
|
50
|
+
' > meta.json
|
51
|
+
|
52
|
+
# expose to GH env
|
53
|
+
echo "PROJECT_ID=$(jq -r .projectId meta.json)" >> $GITHUB_ENV
|
54
|
+
echo "STATUS_FIELD_ID=$(jq -r .statusFieldId meta.json)" >> $GITHUB_ENV
|
55
|
+
# options is an object like {"Eligible":"ID1","Bounty Posted":"ID2",...}
|
56
|
+
echo "STATUS_OPTIONS=$(jq -c .options meta.json)" >> $GITHUB_ENV
|
57
|
+
|
58
|
+
- name: Determine target option ID
|
59
|
+
id: pick
|
60
|
+
run: |
|
61
|
+
LABEL="${{ github.event.label.name }}"
|
62
|
+
# map label→ field option name
|
63
|
+
case "$LABEL" in
|
64
|
+
eligible) OPT_NAME="📝 Eligible" ;;
|
65
|
+
bounty-official) OPT_NAME="💰 Bounty" ;;
|
66
|
+
claimed) OPT_NAME="🛠️ In Progress" ;;
|
67
|
+
*) echo "No matching status for $LABEL"; exit 0 ;;
|
68
|
+
esac
|
69
|
+
|
70
|
+
# extract from JSON map
|
71
|
+
OPT_ID=$(echo "$STATUS_OPTIONS" | jq -r --arg name "$OPT_NAME" '.[$name]')
|
72
|
+
echo "OPTION_ID=$OPT_ID" >> $GITHUB_ENV
|
73
|
+
|
74
|
+
- name: Ensure issue is in the project
|
75
|
+
id: add_if_missing
|
76
|
+
env:
|
77
|
+
GH_TOKEN: ${{ env.PROJECT_TOKEN }}
|
78
|
+
run: |
|
79
|
+
ISSUE_NODE_ID=$(gh api graphql -f query='
|
80
|
+
query($owner:String!,$repo:String!,$number:Int!){
|
81
|
+
repository(owner:$owner, name:$repo){
|
82
|
+
issue(number:$number){
|
83
|
+
id
|
84
|
+
projectItems(first:1){
|
85
|
+
nodes{ id }
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}' \
|
90
|
+
-f owner="droidrun" \
|
91
|
+
-f repo="droidrun" \
|
92
|
+
-F number=104 \
|
93
|
+
--jq '.data.repository.issue as $i |
|
94
|
+
{ issueId: $i.id,
|
95
|
+
itemId: ($i.projectItems.nodes[0]?.id // "") }' )
|
96
|
+
|
97
|
+
# Save to file
|
98
|
+
echo "$ISSUE_NODE_ID" > issue.json
|
99
|
+
ISSUE_ID=$(jq -r .issueId issue.json)
|
100
|
+
ITEM_ID=$(jq -r .itemId issue.json)
|
101
|
+
|
102
|
+
if [ -z "$ITEM_ID" ]; then
|
103
|
+
ITEM_ID=$(gh api graphql -f query='
|
104
|
+
mutation($proj:ID!,$content:ID!){
|
105
|
+
addProjectV2ItemById(input:{projectId:$proj, contentId:$content}){
|
106
|
+
item { id }
|
107
|
+
}
|
108
|
+
}' \
|
109
|
+
-f proj="${PROJECT_ID}" -f content="$ISSUE_ID" \
|
110
|
+
--jq '.data.addProjectV2ItemById.item.id')
|
111
|
+
fi
|
112
|
+
echo "ITEM_ID=$ITEM_ID" >> $GITHUB_ENV
|
113
|
+
|
114
|
+
- name: Update Status field
|
115
|
+
env:
|
116
|
+
GH_TOKEN: ${{ env.PROJECT_TOKEN }}
|
117
|
+
run: |
|
118
|
+
gh api graphql -f query='
|
119
|
+
mutation($proj:ID!,$item:ID!,$field:ID!,$opt:String!){
|
120
|
+
updateProjectV2ItemFieldValue(input:{
|
121
|
+
projectId: $proj,
|
122
|
+
itemId: $item,
|
123
|
+
fieldId: $field,
|
124
|
+
value: {
|
125
|
+
singleSelectOptionId: $opt
|
126
|
+
}
|
127
|
+
}) {
|
128
|
+
projectV2Item { id }
|
129
|
+
}
|
130
|
+
}' \
|
131
|
+
-f proj="${PROJECT_ID}" \
|
132
|
+
-f item="${ITEM_ID}" \
|
133
|
+
-f field="${STATUS_FIELD_ID}" \
|
134
|
+
-f opt="${OPTION_ID}"
|
@@ -53,6 +53,7 @@ jobs:
|
|
53
53
|
|
54
54
|
publish-to-testpypi:
|
55
55
|
name: Publish Python 🐍 distribution 📦 to TestPyPI
|
56
|
+
if: startsWith(github.ref, 'refs/tags/')
|
56
57
|
needs:
|
57
58
|
- build
|
58
59
|
runs-on: ubuntu-latest
|
@@ -73,4 +74,4 @@ jobs:
|
|
73
74
|
- name: Publish distribution 📦 to TestPyPI
|
74
75
|
uses: pypa/gh-action-pypi-publish@release/v1
|
75
76
|
with:
|
76
|
-
repository-url: https://test.pypi.org/legacy/
|
77
|
+
repository-url: https://test.pypi.org/legacy/
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: droidrun
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.4
|
4
4
|
Summary: A framework for controlling Android devices through LLM agents
|
5
5
|
Project-URL: Homepage, https://github.com/droidrun/droidrun
|
6
6
|
Project-URL: Bug Tracker, https://github.com/droidrun/droidrun/issues
|
@@ -25,9 +25,11 @@ Classifier: Topic :: Software Development :: Testing
|
|
25
25
|
Classifier: Topic :: Software Development :: Testing :: Acceptance
|
26
26
|
Classifier: Topic :: System :: Emulators
|
27
27
|
Classifier: Topic :: Utilities
|
28
|
-
Requires-Python: >=3.
|
28
|
+
Requires-Python: >=3.11
|
29
|
+
Requires-Dist: adbutils==2.10.0
|
29
30
|
Requires-Dist: aiofiles>=23.0.0
|
30
31
|
Requires-Dist: anthropic>=0.7.0
|
32
|
+
Requires-Dist: apkutils==2.0.0
|
31
33
|
Requires-Dist: arize-phoenix
|
32
34
|
Requires-Dist: click>=8.1.0
|
33
35
|
Requires-Dist: llama-index
|
@@ -64,6 +66,12 @@ Description-Content-Type: text/markdown
|
|
64
66
|
[](https://droidrun.ai/benchmark)
|
65
67
|
[](https://x.com/droid_run)
|
66
68
|
|
69
|
+
<picture>
|
70
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=dark&period=daily&t=1753948032207">
|
71
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523">
|
72
|
+
<a href="https://www.producthunt.com/products/droidrun-framework-for-mobile-agent?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_source=badge-droidrun" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523" alt="Droidrun - Give AI native control of physical & virtual phones. | Product Hunt" style="width: 200px; height: 54px;" width="200" height="54" /></a>
|
73
|
+
</picture>
|
74
|
+
|
67
75
|
|
68
76
|
|
69
77
|
DroidRun is a powerful framework for controlling Android and iOS devices through LLM agents. It allows you to automate device interactions using natural language commands. [Checkout our benchmark results](https://droidrun.ai/benchmark)
|
@@ -91,17 +99,21 @@ Read on how to get droidrun up and running within seconds in [our docs](https://
|
|
91
99
|
|
92
100
|
## 🎬 Demo Videos
|
93
101
|
|
94
|
-
1. **
|
102
|
+
1. **Accommodation booking**: Let Droidrun search for an apartment for you
|
103
|
+
|
104
|
+
[](https://youtu.be/VUpCyq1PSXw)
|
105
|
+
|
106
|
+
<br>
|
95
107
|
|
96
|
-
|
108
|
+
2. **Trend Hunter**: Let Droidrun hunt down trending posts
|
97
109
|
|
98
|
-
|
110
|
+
[](https://youtu.be/7V8S2f8PnkQ)
|
99
111
|
|
100
|
-
|
112
|
+
<br>
|
101
113
|
|
102
|
-
3. **
|
114
|
+
3. **Streak Saver**: Let Droidrun save your streak on your favorite language learning app
|
103
115
|
|
104
|
-
|
116
|
+
[](https://youtu.be/B5q2B467HKw)
|
105
117
|
|
106
118
|
|
107
119
|
## 💡 Example Use Cases
|
@@ -10,6 +10,12 @@
|
|
10
10
|
[](https://droidrun.ai/benchmark)
|
11
11
|
[](https://x.com/droid_run)
|
12
12
|
|
13
|
+
<picture>
|
14
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=dark&period=daily&t=1753948032207">
|
15
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523">
|
16
|
+
<a href="https://www.producthunt.com/products/droidrun-framework-for-mobile-agent?embed=true&utm_source=badge-top-post-badge&utm_medium=badge&utm_source=badge-droidrun" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=983810&theme=neutral&period=daily&t=1753948125523" alt="Droidrun - Give AI native control of physical & virtual phones. | Product Hunt" style="width: 200px; height: 54px;" width="200" height="54" /></a>
|
17
|
+
</picture>
|
18
|
+
|
13
19
|
|
14
20
|
|
15
21
|
DroidRun is a powerful framework for controlling Android and iOS devices through LLM agents. It allows you to automate device interactions using natural language commands. [Checkout our benchmark results](https://droidrun.ai/benchmark)
|
@@ -37,17 +43,21 @@ Read on how to get droidrun up and running within seconds in [our docs](https://
|
|
37
43
|
|
38
44
|
## 🎬 Demo Videos
|
39
45
|
|
40
|
-
1. **
|
46
|
+
1. **Accommodation booking**: Let Droidrun search for an apartment for you
|
47
|
+
|
48
|
+
[](https://youtu.be/VUpCyq1PSXw)
|
49
|
+
|
50
|
+
<br>
|
41
51
|
|
42
|
-
|
52
|
+
2. **Trend Hunter**: Let Droidrun hunt down trending posts
|
43
53
|
|
44
|
-
|
54
|
+
[](https://youtu.be/7V8S2f8PnkQ)
|
45
55
|
|
46
|
-
|
56
|
+
<br>
|
47
57
|
|
48
|
-
3. **
|
58
|
+
3. **Streak Saver**: Let Droidrun save your streak on your favorite language learning app
|
49
59
|
|
50
|
-
|
60
|
+
[](https://youtu.be/B5q2B467HKw)
|
51
61
|
|
52
62
|
|
53
63
|
## 💡 Example Use Cases
|
@@ -0,0 +1,146 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "https://mintlify.com/docs.json",
|
3
|
+
"theme": "mint",
|
4
|
+
"name": "DroidRun",
|
5
|
+
"colors": {
|
6
|
+
"primary": "#0D9373",
|
7
|
+
"light": "#07C983",
|
8
|
+
"dark": "#0D9373"
|
9
|
+
},
|
10
|
+
"favicon": "/favicon.png",
|
11
|
+
"navigation": {
|
12
|
+
"tabs": [
|
13
|
+
{
|
14
|
+
"tab": "Framework",
|
15
|
+
"versions": [
|
16
|
+
{
|
17
|
+
"version": "0.3.3",
|
18
|
+
"groups": [
|
19
|
+
{
|
20
|
+
"group": "Introduction",
|
21
|
+
"pages": [
|
22
|
+
"v3/overview",
|
23
|
+
"v3/quickstart"
|
24
|
+
]
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"group": "Guides",
|
28
|
+
"pages": [
|
29
|
+
"v3/guides/overview",
|
30
|
+
"v3/guides/cli",
|
31
|
+
"v3/guides/gemini",
|
32
|
+
"v3/guides/openailike",
|
33
|
+
"v3/guides/ollama",
|
34
|
+
"v3/guides/telemetry"
|
35
|
+
]
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"group": "Core Concepts",
|
39
|
+
"pages": [
|
40
|
+
"v3/concepts/agent",
|
41
|
+
"v3/concepts/models",
|
42
|
+
"v3/concepts/android-tools",
|
43
|
+
"v3/concepts/portal-app"
|
44
|
+
]
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"group": "SDK Reference",
|
48
|
+
"pages": [
|
49
|
+
"v3/sdk/droid-agent",
|
50
|
+
"v3/sdk/adb-tools",
|
51
|
+
"v3/sdk/ios-tools",
|
52
|
+
"v3/sdk/base-tools"
|
53
|
+
]
|
54
|
+
}
|
55
|
+
]
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"version": "0.2.0",
|
59
|
+
"groups": [
|
60
|
+
{
|
61
|
+
"group": "Getting Started",
|
62
|
+
"pages": [
|
63
|
+
"v2/overview",
|
64
|
+
"v2/quickstart"
|
65
|
+
]
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"group": "Core Concepts",
|
69
|
+
"pages": [
|
70
|
+
"v2/concepts/agent",
|
71
|
+
"v2/concepts/planning",
|
72
|
+
"v2/concepts/android-control",
|
73
|
+
"v2/concepts/portal-app",
|
74
|
+
"v2/concepts/tracing"
|
75
|
+
]
|
76
|
+
}
|
77
|
+
]
|
78
|
+
},
|
79
|
+
{
|
80
|
+
"version": "0.1.0",
|
81
|
+
"groups": [
|
82
|
+
{
|
83
|
+
"group": "Getting Started",
|
84
|
+
"pages": [
|
85
|
+
"v1/overview",
|
86
|
+
"v1/quickstart"
|
87
|
+
]
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"group": "Core Concepts",
|
91
|
+
"pages": [
|
92
|
+
"v1/concepts/agent",
|
93
|
+
"v1/concepts/android-control",
|
94
|
+
"v1/concepts/portal-app"
|
95
|
+
]
|
96
|
+
}
|
97
|
+
]
|
98
|
+
}
|
99
|
+
]
|
100
|
+
},
|
101
|
+
{
|
102
|
+
"tab": "Cloud API",
|
103
|
+
"versions": [
|
104
|
+
{
|
105
|
+
"version": "0.1.0",
|
106
|
+
"openapi": "https://api.droidrun.ai/v1/openapi.json"
|
107
|
+
}
|
108
|
+
]
|
109
|
+
}
|
110
|
+
]
|
111
|
+
},
|
112
|
+
"logo": {
|
113
|
+
"light": "/logo/light.svg",
|
114
|
+
"dark": "/logo/dark.svg"
|
115
|
+
},
|
116
|
+
"navbar": {
|
117
|
+
"links": [
|
118
|
+
{
|
119
|
+
"label": "GitHub",
|
120
|
+
"href": "https://github.com/droidrun/droidrun"
|
121
|
+
},
|
122
|
+
{
|
123
|
+
"label": "Benchmark",
|
124
|
+
"href": "https://droidrun.ai/benchmark"
|
125
|
+
}
|
126
|
+
],
|
127
|
+
"primary": {
|
128
|
+
"type": "button",
|
129
|
+
"label": "Join Discord",
|
130
|
+
"href": "https://discord.gg/gdekvkJFvn"
|
131
|
+
}
|
132
|
+
},
|
133
|
+
"footer": {
|
134
|
+
"socials": {
|
135
|
+
"github": "https://github.com/droidrun/droidrun",
|
136
|
+
"x": "https://x.com/droid_run",
|
137
|
+
"discord": "https://discord.gg/gdekvkJFvn",
|
138
|
+
"website": "https://droidrun.ai"
|
139
|
+
}
|
140
|
+
},
|
141
|
+
"errors": {
|
142
|
+
"404": {
|
143
|
+
"redirect": false
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}
|
@@ -21,7 +21,7 @@ def __init__(
|
|
21
21
|
reflection: bool = False, # Enable reflection
|
22
22
|
enable_tracing: bool = False, # Enable tracing (this requires arize phoenix)
|
23
23
|
debug: bool = False, # Enable additional debug logs
|
24
|
-
save_trajectories:
|
24
|
+
save_trajectories: str = "none", # Trajectory saving level: "none" (no saving), "step" (save per step), "action" (save per action)
|
25
25
|
*args,
|
26
26
|
**kwargs
|
27
27
|
)
|
@@ -92,6 +92,7 @@ agent = DroidAgent(
|
|
92
92
|
reflection=True
|
93
93
|
)
|
94
94
|
```
|
95
|
+
<Warning>Reflection is based on screenshots. Use it alongside an LLM model with vision capabilities (e.g., GPT-4o, Gemini-2.5-Flash etc.).</Warning>
|
95
96
|
**Flow:** Goal → Planning → Execution → Reflection → Re-planning (if needed) → Result
|
96
97
|
|
97
98
|
**Best Practice:**
|
@@ -37,12 +37,12 @@ Convenience method to press the Android back button.
|
|
37
37
|
|
38
38
|
```python
|
39
39
|
# UI interaction examples
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
tools.get_state() # Cache elements first
|
41
|
+
tools.tap_by_index(2) # Tap element
|
42
|
+
tools.swipe(500, 200, 500, 800, 400) # Swipe down
|
43
|
+
tools.input_text("Hello, World!")
|
44
|
+
tools.press_key(66) # Enter key
|
45
|
+
tools.back()
|
46
46
|
```
|
47
47
|
|
48
48
|
## App Management Tools
|
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
2
|
title: 'Supported Models'
|
3
|
-
description: 'DroidRun is **LLM agnostic**, which means you can use every LLM provider there is.
|
3
|
+
description: 'DroidRun is **LLM agnostic**, which means you can use every LLM provider there is.
|
4
4
|
|
5
5
|
Under the hood, DroidRun leverages [LlamaIndex LLM providers](https://docs.llamaindex.ai/en/stable/api_reference/llms/) to provide seamless integration with all major language model providers. This means you can easily switch between different providers or use multiple providers simultaneously depending on your needs.
|
6
6
|
'
|
@@ -8,7 +8,7 @@ Under the hood, DroidRun leverages [LlamaIndex LLM providers](https://docs.llama
|
|
8
8
|
|
9
9
|
## Install LLM Provider
|
10
10
|
```bash
|
11
|
-
# Install the package for your
|
11
|
+
# Install the package for your preferred LLM Provider
|
12
12
|
pip install llama-index-llms-[PROVIDER]
|
13
13
|
```
|
14
14
|
|
@@ -19,6 +19,8 @@ DroidRun supports all major LLM providers through LlamaIndex, including but not
|
|
19
19
|
- **OpenAI** (GPT-4o, GPT-o3, etc.)
|
20
20
|
- **Anthropic** (Claude models)
|
21
21
|
- **GoogleGenAI** (Gemini)
|
22
|
+
- **OpenAILike** (OpenAI-compatible APIs such as OpenRouter, Azure OpenAI, local LM Studio)
|
23
|
+
- **DeepSeek** (DeepSeek LLM integrations)
|
22
24
|
- **Azure OpenAI Service**
|
23
25
|
- **AWS Bedrock**
|
24
26
|
- **Cohere**
|
@@ -61,12 +61,14 @@ from droidrun import DroidAgent, AdbTools
|
|
61
61
|
|
62
62
|
async def main():
|
63
63
|
# load adb tools for the first connected device
|
64
|
-
tools =
|
64
|
+
tools = AdbTools()
|
65
65
|
|
66
66
|
# Set up the Ollama LLM with a modern model
|
67
67
|
llm = Ollama(
|
68
|
-
model="qwen2.5vl",
|
69
|
-
base_url="http://localhost:11434" # default Ollama endpoint
|
68
|
+
model="qwen2.5vl", # or "gemma3", "deepseek", "llama4", etc.
|
69
|
+
base_url="http://localhost:11434", # default Ollama endpoint
|
70
|
+
context_window=8192, # limit the max context window to prevent running out of memory.
|
71
|
+
request_timeout=120.0 # increase the request timeout
|
70
72
|
)
|
71
73
|
|
72
74
|
# Create the DroidAgent
|
@@ -74,7 +76,7 @@ async def main():
|
|
74
76
|
goal="Open Settings and check battery level",
|
75
77
|
llm=llm,
|
76
78
|
tools=tools,
|
77
|
-
vision=
|
79
|
+
vision=False, # Optional: enable vision. use vision=True only in conjunction with a vision model
|
78
80
|
reasoning=True, # Optional: enable planning/reasoning. Read more about the agent configuration in Core-Concepts/Agent
|
79
81
|
)
|
80
82
|
|
@@ -88,6 +90,8 @@ if __name__ == "__main__":
|
|
88
90
|
asyncio.run(main())
|
89
91
|
```
|
90
92
|
|
93
|
+
<Note>Limiting the llm's context_window reduces memory usage, but degrades the agent's performance too. For the best results try extending it as much as possible.</Note>
|
94
|
+
|
91
95
|
## 4. Troubleshooting
|
92
96
|
|
93
97
|
- **Ollama not running:** Make sure `ollama serve` is running and accessible at `http://localhost:11434`.
|
@@ -50,7 +50,7 @@ from droidrun import DroidAgent, AdbTools
|
|
50
50
|
|
51
51
|
async def main():
|
52
52
|
# Load adb tools for the first connected device
|
53
|
-
tools =
|
53
|
+
tools = AdbTools()
|
54
54
|
|
55
55
|
# Set up the OpenAI-like LLM (uses env vars for API key and base by default)
|
56
56
|
llm = OpenAILike(
|
@@ -59,7 +59,7 @@ from llama_index.llms.google_genai import GoogleGenAI
|
|
59
59
|
|
60
60
|
async def main():
|
61
61
|
# Load tools
|
62
|
-
tools =
|
62
|
+
tools = AdbTools()
|
63
63
|
# set up google gemini llm
|
64
64
|
llm = GoogleGenAI(
|
65
65
|
api_key="YOUR_GEMINI_API_KEY", # Replace with your Gemini API key
|