You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ModelOption.GEMMA_3_27B_IT->"Google doesn't support screenshots in the API for this model."
287
+
ModelOption.GPT_OSS_120B->"This is a pure text model\nCerebras sometimes discontinues free access in the Free Tier, displaying an \"Error 404: gpt-oss-120b does not exist or you do not have access to it\" message, or changes the rate limits."
288
+
ModelOption.MISTRAL_LARGE_3->"Mistral AI rejects requests containing non-black images with a 429 Error: Rate limit exceeded response"
289
+
ModelOption.GEMINI_3_FLASH->"Google often rejects requests to this model with a 503 Model is exhausted error"
290
+
ModelOption.PUTER_GLM5->"This model is expensive and uses up the free quota quickly. Consider GPT 5.4 nano"
291
+
ModelOption.GPT_5_1_CODEX_MAX,
292
+
ModelOption.GPT_5_1_CODEX_MINI,
293
+
ModelOption.GPT_5_NANO->"Vercel requires a credit card"
294
+
else->""
295
+
}
296
+
if (modelHint.isNotBlank()) {
297
+
Spacer(modifier =Modifier.height(8.dp))
298
+
Text(
299
+
text = modelHint,
300
+
style =MaterialTheme.typography.bodyMedium,
301
+
color =MaterialTheme.colorScheme.onSurfaceVariant
302
+
)
303
+
}
255
304
}
256
305
}
257
306
}
@@ -583,29 +632,19 @@ fun MenuScreen(
583
632
withStyle(boldStyle) { append("API Keys") }
584
633
append(" are automatically switched if multiple are inserted and one is exhausted.\n")
585
634
586
-
append("• ")
587
-
withStyle(boldStyle) { append("GPT-oss 120b") }
588
-
append(" is a pure text model.\n")
589
-
append("• ")
590
-
591
-
withStyle(boldStyle) { append("Gemma 27B IT") }
592
-
append(" cannot handle screenshots in the API.\n")
635
+
append("• Models with a line through them do not work properly.\n")
593
636
append("• GPT models (")
594
637
withStyle(boldStyle) { append("Vercel") }
595
638
append(") have a free budget of \$5 per month and a credit card is necessary.\n")
append("• When a language model repeats a token, Top K and Top P must be lowered.\n")
600
-
append("• There are ")
601
-
withStyle(boldStyle) { append("rate limits") }
602
-
append(" for free use of ")
603
-
withStyle(boldStyle) { append("Gemini models") }
604
-
append(". The less powerful the models are, the more you can use them. The limits range from a maximum of 5 to 30 calls per minute. After each screenshot (every 2-3 seconds) the LLM must respond again. More information is available at ")
643
+
append("• Google has recently significantly tightened its rate limits and is fluctuating widely with its free quota. Try it for yourself. More information is available at ")
privateconstvalKEY_FIRST_START_COMPLETED="first_start_completed"// New flag
15
15
16
16
// Content from pasted_content.txt
17
-
private const val DEFAULT_SYSTEM_MESSAGE_ON_FIRST_START = """You are on an App on a Smartphone. Your app is called Screen Operator. You start from this app. Proceed step by step! DON'T USE TOOL CODE! You must operate the screen with exactly following commands: "home()" "back()" "recentApps()" "openApp("sample")" for buttons and words: "click("sample")" "longClick("sample")" "tapAtCoordinates(x, y)" "tapAtCoordinates(x percent of screen%, y percent of screen%)" "scrollDown()" "scrollUp()" "scrollLeft()" "scrollRight()" "scrollDown(x, y, how much pixel to scroll, duration in milliseconds)" "scrollUp(x, y, how much pixel to scroll, duration in milliseconds)" "scrollLeft(x, y, how much pixel to scroll, duration in milliseconds)" "scrollRight(x, y, how much pixel to scroll, duration in milliseconds)" "scrollDown(x percent of screen%, y percent of screen%, how much percent to scroll%, duration in milliseconds)" "scrollUp(x percent of screen%, y percent of screen%, how much percent to scroll, duration in milliseconds)" "scrollLeft(x percent of screen%, y percent of screen%, how much percent to scroll, duration in milliseconds)" "scrollRight(x percent of screen%, y percent of screen%, how much percent to scroll, duration in milliseconds)" scroll status bar down: "scrollUp(540, 0, 1100, 50)" "takeScreenshot()" To write text, search and click the textfield thereafter: "writeText("sample text")" You need to write the already existing text, if it should continue exist. If the keyboard is displayed, you can press "Enter()". Otherwise, you have to open the keyboard by clicking on the text field. You can see the screen and get additional Informations about them with: "takeScreenshot()" You need this command at the end of every message until you are finish. When you're done don't say "takeScreenshot()" Your task is:"""
17
+
private const val DEFAULT_SYSTEM_MESSAGE_ON_FIRST_START = """You are on an App on a Smartphone. Your app is called Screen Operator. You start from this app. Proceed step by step! DON'T USE TOOL CODE! You must operate the screen with exactly following commands: "home()" "back()" "recentApps()" "openApp("sample")" for buttons and words: "click("sample")" "longClick("sample")" "tapAtCoordinates(x, y)" "tapAtCoordinates(x percent of screen%, y percent of screen%)" "scrollDown()" "scrollUp()" "scrollLeft()" "scrollRight()" "scrollDown(x, y, how much pixel to scroll, duration in milliseconds)" "scrollUp(x, y, how much pixel to scroll, duration in milliseconds)" "scrollLeft(x, y, how much pixel to scroll, duration in milliseconds)" "scrollRight(x, y, how much pixel to scroll, duration in milliseconds)" "scrollDown(x percent of screen%, y percent of screen%, how much percent to scroll%, duration in milliseconds)" "scrollUp(x percent of screen%, y percent of screen%, how much percent to scroll, duration in milliseconds)" "scrollLeft(x percent of screen%, y percent of screen%, how much percent to scroll, duration in milliseconds)" "scrollRight(x percent of screen%, y percent of screen%, how much percent to scroll, duration in milliseconds)" scroll status bar down: "scrollUp(540, 0, 1100, 50)" "takeScreenshot()" To write text, search and click the textfield thereafter: "writeText("sample text")" You need to write the already existing text, if it should continue exist. If the keyboard is displayed, you can press "Enter()". Otherwise, you have to open the keyboard by clicking on the text field. Don't write the commands if you're just planing about it or messaging me. You can see the screen and get additional Informations about them with: "takeScreenshot()" You need this command at the end of every message until you are finish. When you're done don't say "takeScreenshot()" Your task is:"""
0 commit comments