File size: 3,874 Bytes
e187916
 
 
59022ca
 
 
 
e187916
59022ca
 
e187916
59022ca
 
 
e187916
 
3c4fcca
 
 
 
 
 
 
 
 
e187916
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59022ca
e187916
59022ca
e187916
59022ca
e187916
 
59022ca
 
e187916
 
59022ca
 
 
 
 
 
 
 
 
 
 
e187916
 
 
 
 
 
 
59022ca
 
 
 
 
 
 
 
 
e187916
 
3c4fcca
 
 
 
 
 
 
 
 
 
 
 
 
 
e187916
3c4fcca
e187916
 
 
59022ca
 
 
 
 
3c4fcca
 
 
 
 
 
 
e187916
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
"""Tiny Computer Agent - an agentic harness that drives a real computer with a
tiny, fully local model.

The harness is deliberately boring: it owns the loop, the closed action vocabulary,
perception and the safety gates, so the model only ever answers one question -
"which item from this short menu, and which verb?"  Nothing here needs a network
call at run time, and the core imports nothing outside the standard library.

    from tiny_computer_agent import AgentLoop, GrabScreen, IndexedScreen, OcrDetector
    from tiny_computer_agent.models import TextPlannerBrain

    screen = IndexedScreen(GrabScreen(), OcrDetector())      # pixels -> labels
    brain = TextPlannerBrain()                               # 0.5B, CPU-friendly
    loop = AgentLoop(screen=screen, brain=brain)             # dry run by default
    episode = loop.run("save the document")
    print(episode.render())

An episode can be saved as a portable *trace*, replayed offline, and scored, so
"the model looked plausible on that screenshot" becomes a number:

    from tiny_computer_agent import Trace, benchmark, run_scenario

    trace = run_scenario(Scenario("click 'Save'", frames=[...], expected="Save"), brain)
    trace.save("traces/save.json")                           # diffable, no pixels
    print(benchmark(scenarios, {"planner": lambda s: PlannerBrain()}).render())
"""

from tiny_computer_agent.act import (
    ActionResult,
    DryRunExecutor,
    Executor,
    InputUnavailable,
    PyAutoGuiExecutor,
    resolve_point,
)
from tiny_computer_agent.actions import (
    ACTION_KINDS,
    ACTION_MENU,
    Action,
    ActionError,
    parse_action,
)
from tiny_computer_agent.brain import (
    Brain,
    BrainError,
    DecisionMenu,
    GoalUnreachable,
    MenuItem,
    MockBrain,
    ModelBrain,
    PlannerBrain,
    extract_json_object,
    extract_json_objects,
    parse_decision,
)
from tiny_computer_agent.loop import AgentLoop, Episode, Step
from tiny_computer_agent.models import (
    DEFAULT_TEXT_MODEL,
    DEFAULT_VISION_MODEL,
    MODEL_BRAINS,
    TextPlannerBrain,
    VLMBrain,
    make_model_brain,
    model_cached,
    model_dependencies,
    resolve_device,
)
from tiny_computer_agent.observe import (
    Element,
    FakeScreen,
    GrabScreen,
    Observation,
    ScreenSource,
    ScreenUnavailable,
    normalise_label,
)
from tiny_computer_agent.perception import (
    Detector,
    DetectorUnavailable,
    IndexedScreen,
    OcrDetector,
    detector_available,
    make_detector,
)
from tiny_computer_agent.safety import Policy, PolicyViolation
from tiny_computer_agent.trace import (
    Scenario,
    Scoreboard,
    Trace,
    TraceStep,
    Verdict,
    benchmark,
    benchmark_traces,
    load_traces,
    run_scenario,
    score,
    score_replay,
    score_trace,
)

__version__ = "0.3.0"

__all__ = [
    "ACTION_KINDS", "ACTION_MENU", "Action", "ActionError", "ActionResult",
    "AgentLoop", "Brain", "BrainError", "DEFAULT_TEXT_MODEL", "DEFAULT_VISION_MODEL",
    "DecisionMenu", "Detector", "DetectorUnavailable", "DryRunExecutor", "Element",
    "Episode", "Executor", "FakeScreen", "GoalUnreachable", "GrabScreen",
    "IndexedScreen", "InputUnavailable", "MODEL_BRAINS", "MenuItem", "MockBrain",
    "ModelBrain", "Observation", "OcrDetector", "PlannerBrain", "Policy",
    "PolicyViolation", "PyAutoGuiExecutor", "Scenario", "Scoreboard", "ScreenSource",
    "ScreenUnavailable", "Step", "TextPlannerBrain", "Trace", "TraceStep", "VLMBrain",
    "Verdict", "benchmark", "benchmark_traces", "detector_available",
    "extract_json_object", "extract_json_objects", "load_traces", "make_detector",
    "make_model_brain", "model_cached", "model_dependencies", "normalise_label",
    "parse_action", "parse_decision", "resolve_device", "resolve_point",
    "run_scenario", "score", "score_replay", "score_trace", "__version__",
]