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.
Files changed (107) hide show
  1. droidrun-0.3.4/.github/workflows/bounty.yml +134 -0
  2. {droidrun-0.3.2 → droidrun-0.3.4}/.github/workflows/publish.yml +2 -1
  3. {droidrun-0.3.2 → droidrun-0.3.4}/.gitignore +5 -0
  4. {droidrun-0.3.2 → droidrun-0.3.4}/PKG-INFO +20 -8
  5. {droidrun-0.3.2 → droidrun-0.3.4}/README.md +16 -6
  6. droidrun-0.3.4/docs/.generated-files.txt +4 -0
  7. droidrun-0.3.4/docs/docs.json +146 -0
  8. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/agent.mdx +2 -1
  9. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/android-tools.mdx +6 -6
  10. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/models.mdx +4 -2
  11. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/gemini.mdx +1 -1
  12. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/ollama.mdx +8 -4
  13. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/openailike.mdx +1 -1
  14. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/quickstart.mdx +1 -1
  15. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/adb-tools.mdx +119 -24
  16. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/base-tools.mdx +44 -13
  17. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/droid-agent.mdx +7 -2
  18. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/sdk/ios-tools.mdx +39 -36
  19. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/__init__.py +6 -2
  20. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/codeact_agent.py +20 -14
  21. droidrun-0.3.4/droidrun/agent/common/events.py +47 -0
  22. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/__init__.py +2 -0
  23. droidrun-0.3.4/droidrun/agent/context/personas/big_agent.py +96 -0
  24. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/ui_expert.py +1 -0
  25. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/task_manager.py +8 -3
  26. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/droid/droid_agent.py +50 -16
  27. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/droid/events.py +1 -0
  28. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/planner_agent.py +19 -14
  29. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/chat_utils.py +1 -1
  30. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/executer.py +17 -1
  31. droidrun-0.3.4/droidrun/agent/utils/trajectory.py +431 -0
  32. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/cli/main.py +108 -44
  33. droidrun-0.3.4/droidrun/macro/__init__.py +14 -0
  34. droidrun-0.3.4/droidrun/macro/__main__.py +10 -0
  35. droidrun-0.3.4/droidrun/macro/cli.py +228 -0
  36. droidrun-0.3.4/droidrun/macro/replay.py +309 -0
  37. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/portal.py +37 -22
  38. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/telemetry/events.py +1 -1
  39. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/telemetry/tracker.py +3 -2
  40. droidrun-0.3.4/droidrun/tools/adb.py +1127 -0
  41. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/tools/ios.py +163 -163
  42. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/tools/tools.py +60 -14
  43. {droidrun-0.3.2 → droidrun-0.3.4}/pyproject.toml +20 -32
  44. droidrun-0.3.2/docs/.generated-files.txt +0 -5
  45. droidrun-0.3.2/docs/docs.json +0 -133
  46. droidrun-0.3.2/docs/v3/sdk/adb-utils.mdx +0 -399
  47. droidrun-0.3.2/droidrun/adb/__init__.py +0 -13
  48. droidrun-0.3.2/droidrun/adb/device.py +0 -345
  49. droidrun-0.3.2/droidrun/adb/manager.py +0 -93
  50. droidrun-0.3.2/droidrun/adb/wrapper.py +0 -226
  51. droidrun-0.3.2/droidrun/agent/common/events.py +0 -4
  52. droidrun-0.3.2/droidrun/agent/utils/trajectory.py +0 -184
  53. droidrun-0.3.2/droidrun/tools/adb.py +0 -671
  54. {droidrun-0.3.2 → droidrun-0.3.4}/CHANGELOG.md +0 -0
  55. {droidrun-0.3.2 → droidrun-0.3.4}/CONTRIBUTING.md +0 -0
  56. {droidrun-0.3.2 → droidrun-0.3.4}/LICENSE +0 -0
  57. {droidrun-0.3.2 → droidrun-0.3.4}/MANIFEST.in +0 -0
  58. {droidrun-0.3.2 → droidrun-0.3.4}/docs/favicon.png +0 -0
  59. {droidrun-0.3.2 → droidrun-0.3.4}/docs/logo/dark.svg +0 -0
  60. {droidrun-0.3.2 → droidrun-0.3.4}/docs/logo/light.svg +0 -0
  61. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/concepts/agent.mdx +0 -0
  62. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/concepts/android-control.mdx +0 -0
  63. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/concepts/portal-app.mdx +0 -0
  64. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/overview.mdx +0 -0
  65. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v1/quickstart.mdx +0 -0
  66. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/agent.mdx +0 -0
  67. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/android-control.mdx +0 -0
  68. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/planning.mdx +0 -0
  69. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/portal-app.mdx +0 -0
  70. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/concepts/tracing.mdx +0 -0
  71. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/overview.mdx +0 -0
  72. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v2/quickstart.mdx +0 -0
  73. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/concepts/portal-app.mdx +0 -0
  74. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/cli.mdx +0 -0
  75. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/overview.mdx +0 -0
  76. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/guides/telemetry.mdx +0 -0
  77. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/images/portal_apk.png +0 -0
  78. {droidrun-0.3.2 → droidrun-0.3.4}/docs/v3/overview.mdx +0 -0
  79. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/__main__.py +0 -0
  80. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/__init__.py +0 -0
  81. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/__init__.py +0 -0
  82. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/events.py +0 -0
  83. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/codeact/prompts.py +0 -0
  84. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/common/default.py +0 -0
  85. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/__init__.py +0 -0
  86. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/agent_persona.py +0 -0
  87. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/context_injection_manager.py +0 -0
  88. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/episodic_memory.py +0 -0
  89. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/app_starter.py +0 -0
  90. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/personas/default.py +0 -0
  91. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/context/reflection.py +0 -0
  92. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/droid/__init__.py +0 -0
  93. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/oneflows/reflector.py +0 -0
  94. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/__init__.py +0 -0
  95. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/events.py +0 -0
  96. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/planner/prompts.py +0 -0
  97. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/__init__.py +0 -0
  98. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/async_utils.py +0 -0
  99. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/agent/utils/llm_picker.py +0 -0
  100. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/cli/__init__.py +0 -0
  101. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/cli/logs.py +0 -0
  102. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/telemetry/__init__.py +0 -0
  103. {droidrun-0.3.2 → droidrun-0.3.4}/droidrun/tools/__init__.py +0 -0
  104. {droidrun-0.3.2 → droidrun-0.3.4}/gen-docs-sdk-ref.sh +0 -0
  105. {droidrun-0.3.2 → droidrun-0.3.4}/setup.py +0 -0
  106. {droidrun-0.3.2 → droidrun-0.3.4}/static/droidrun-dark.png +0 -0
  107. {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/
@@ -22,3 +22,8 @@ messages_log.json
22
22
  patch_apis.py
23
23
  .git
24
24
  .arize-phoenix
25
+
26
+
27
+ uv.lock
28
+
29
+ todo.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: droidrun
3
- Version: 0.3.2
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.10
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
  [![Benchmark](https://img.shields.io/badge/Benchmark-🏅-teal)](https://droidrun.ai/benchmark)
65
67
  [![Twitter Follow](https://img.shields.io/twitter/follow/droid_run?style=social)](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&#0032;AI&#0032;native&#0032;control&#0032;of&#0032;physical&#0032;&#0038;&#0032;virtual&#0032;phones&#0046; | 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. **Group Chat Summarization**: Let DroidRun summarize an escalated group chat for you.
102
+ 1. **Accommodation booking**: Let Droidrun search for an apartment for you
103
+
104
+ [![Droidrun Accommodation Booking Demo](https://img.youtube.com/vi/VUpCyq1PSXw/0.jpg)](https://youtu.be/VUpCyq1PSXw)
105
+
106
+ <br>
95
107
 
96
- [![Group Chat Summarizer](https://img.youtube.com/vi/ofEnSUHHxX8/0.jpg)](https://www.youtube.com/watch?v=ofEnSUHHxX8)
108
+ 2. **Trend Hunter**: Let Droidrun hunt down trending posts
97
109
 
98
- 2. **Travel Search Assistant**: Wittness DroidRun looking for the cheapest stay and share it with a colleague on telegram.
110
+ [![Droidrun Trend Hunter Demo](https://img.youtube.com/vi/7V8S2f8PnkQ/0.jpg)](https://youtu.be/7V8S2f8PnkQ)
99
111
 
100
- [![Travel Search Assistant](https://img.youtube.com/vi/QgtRaLS3NBM/0.jpg)](https://www.youtube.com/watch?v=QgtRaLS3NBM)
112
+ <br>
101
113
 
102
- 3. **Automate TikTok Shopping**: See how DroidRun looks for a stanley cup on TikTok Shop and send the product details via email.
114
+ 3. **Streak Saver**: Let Droidrun save your streak on your favorite language learning app
103
115
 
104
- [![TikTok Shopping Assistant](https://img.youtube.com/vi/ol3bivBAmn4/0.jpg)](https://www.youtube.com/watch?v=ol3bivBAmn4)
116
+ [![Droidrun Streak Saver Demo](https://img.youtube.com/vi/B5q2B467HKw/0.jpg)](https://youtu.be/B5q2B467HKw)
105
117
 
106
118
 
107
119
  ## 💡 Example Use Cases
@@ -10,6 +10,12 @@
10
10
  [![Benchmark](https://img.shields.io/badge/Benchmark-🏅-teal)](https://droidrun.ai/benchmark)
11
11
  [![Twitter Follow](https://img.shields.io/twitter/follow/droid_run?style=social)](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&#0032;AI&#0032;native&#0032;control&#0032;of&#0032;physical&#0032;&#0038;&#0032;virtual&#0032;phones&#0046; | 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. **Group Chat Summarization**: Let DroidRun summarize an escalated group chat for you.
46
+ 1. **Accommodation booking**: Let Droidrun search for an apartment for you
47
+
48
+ [![Droidrun Accommodation Booking Demo](https://img.youtube.com/vi/VUpCyq1PSXw/0.jpg)](https://youtu.be/VUpCyq1PSXw)
49
+
50
+ <br>
41
51
 
42
- [![Group Chat Summarizer](https://img.youtube.com/vi/ofEnSUHHxX8/0.jpg)](https://www.youtube.com/watch?v=ofEnSUHHxX8)
52
+ 2. **Trend Hunter**: Let Droidrun hunt down trending posts
43
53
 
44
- 2. **Travel Search Assistant**: Wittness DroidRun looking for the cheapest stay and share it with a colleague on telegram.
54
+ [![Droidrun Trend Hunter Demo](https://img.youtube.com/vi/7V8S2f8PnkQ/0.jpg)](https://youtu.be/7V8S2f8PnkQ)
45
55
 
46
- [![Travel Search Assistant](https://img.youtube.com/vi/QgtRaLS3NBM/0.jpg)](https://www.youtube.com/watch?v=QgtRaLS3NBM)
56
+ <br>
47
57
 
48
- 3. **Automate TikTok Shopping**: See how DroidRun looks for a stanley cup on TikTok Shop and send the product details via email.
58
+ 3. **Streak Saver**: Let Droidrun save your streak on your favorite language learning app
49
59
 
50
- [![TikTok Shopping Assistant](https://img.youtube.com/vi/ol3bivBAmn4/0.jpg)](https://www.youtube.com/watch?v=ol3bivBAmn4)
60
+ [![Droidrun Streak Saver Demo](https://img.youtube.com/vi/B5q2B467HKw/0.jpg)](https://youtu.be/B5q2B467HKw)
51
61
 
52
62
 
53
63
  ## 💡 Example Use Cases
@@ -0,0 +1,4 @@
1
+ md5 0b688f460703d59bd84fe71387e626d5 v3/sdk/droid-agent.mdx
2
+ md5 47f362d52ba26155d647efec628294cf v3/sdk/base-tools.mdx
3
+ md5 2e83b80e94101d983ed52ac5ae91314f v3/sdk/adb-tools.mdx
4
+ md5 7d779482901cc5eb62288ac9c8d85199 v3/sdk/ios-tools.mdx
@@ -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: bool = False, # Save the Trajectory data of the run (GIF + logs)
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
- await tools.get_state() # Cache elements first
41
- await tools.tap_by_index(2) # Tap element
42
- await tools.swipe(500, 200, 500, 800, 400) # Swipe down
43
- await tools.input_text("Hello, World!")
44
- await tools.press_key(66) # Enter key
45
- await tools.back()
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 preffered LLM Provider
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**
@@ -46,7 +46,7 @@ from droidrun import DroidAgent, AdbTools
46
46
 
47
47
  async def main():
48
48
  # load adb tools for the first connected device
49
- tools = await AdbTools.create()
49
+ tools = AdbTools()
50
50
 
51
51
  # Set up the Gemini LLM
52
52
  llm = GoogleGenAI(
@@ -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 = await AdbTools.create()
64
+ tools = AdbTools()
65
65
 
66
66
  # Set up the Ollama LLM with a modern model
67
67
  llm = Ollama(
68
- model="qwen2.5vl", # or "gemma3", "deepseek", "llama4", etc.
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=True, # Optional: enable vision. use vision=False for deepseek models
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 = await AdbTools.create()
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 = await AdbTools.create()
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