Skip to content

Commit d439d98

Browse files
committed
1 parent 981a70a commit d439d98

File tree

3 files changed

+112
-10
lines changed

3 files changed

+112
-10
lines changed

content/posts/meetup-56-wrapup.md

Lines changed: 112 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
---
22
title: "Hybrid Meetup #56 wrap-up"
33
date: 2025-11-26T00:30:00+01:00
4-
draft: true
4+
draft: false
55
tags:
66
- summary
77
- meetup
88
---
99

10-
### An older version of the matrix
10+
### An older version of the matrix / 不気味の谷
1111

1212
Hybrid Meetup #56 took place
13-
[2025-11-25](https://www.meetup.com/de-de/leipzig-golang/events/305626275/) 19:00 at
14-
[Basislager Leipzig](https://basislager.co) and we looked into basic agents with Go.
13+
[2025-11-25](https://www.meetup.com/de-de/leipzig-golang/events/305626275/)
14+
19:00 at [Basislager Leipzig](https://basislager.co) and we looked into basic
15+
agents with Go, notes can be found here:
16+
[miku/unplugged](https://github.com/miku/unplugged).
1517

16-
Agents are possible because of the reasoning and tool support of
17-
language models.
18+
Agents are possible because of the *reasoning* and tool support of language
19+
models (and they are [simple to
20+
write](https://fly.io/blog/everyone-write-an-agent/).
1821

1922
An early paper on tools was [*Toolformer: Language Models Can Teach Themselves to Use Tools*](https://arxiv.org/pdf/2302.04761) (2023-02-09)
2023

@@ -30,15 +33,114 @@ An early paper on tools was [*Toolformer: Language Models Can Teach Themselves t
3033
> Given just a handful of human-written examples of how an API can be used, we
3134
> let a LM annotate a huge language modeling dataset with potential API calls.
3235
> We then use a self-supervised loss to determine which of these API calls
33-
> actually help the model in predicting future tokens. Finally, we finetune the
34-
> LM itself on the API calls that it con- siders useful. As illustrated in
35-
> Figure 1, through this simple approach, LMs can learn to control a va- riety
36-
> of tools, and to choose for themselves which tool to use when and how.
36+
> actually help the model in predicting future tokens.
37+
38+
An agentic setup then is mostly a loop that manages a context over time with
39+
the help of tools.
40+
41+
![](/images/lgo-56-looptool.gif)
42+
43+
Google Agent SDK at this time only supports gemini out of the box, so we wrote
44+
a simple agent from scratch (against any openai compatible endpoint) and ended
45+
up with an agent that had a list of tools (some of them not fully implemented):
46+
47+
```
48+
get_weather
49+
add_numbers
50+
get_time
51+
search_library_catalog
52+
ping
53+
list_files
54+
read_file
55+
grep
56+
write_file
57+
append_file
58+
run_command
59+
```
60+
61+
We used both an [RTX 4000 SFF
62+
ADA](https://www.nvidia.com/content/dam/en-zz/Solutions/rtx-4000-sff/proviz-rtx-4000-sff-ada-datasheet-2616456-web.pdf)
63+
and an [AMD AI MAX+ 395 with an
64+
8060S](https://www.amd.com/en/products/processors/laptop/ryzen/ai-300-series/amd-ryzen-ai-max-plus-395.html).
65+
66+
| Spec | AMD Radeon 8060S | NVIDIA RTX 4000 SFF Ada |
67+
|------|------------------|-------------------------|
68+
| **FP16 (theoretical)** | **59.4 TFLOPS** | **~19.2 TFLOPS** |
69+
| Memory Bandwidth | ~212 GB/s (DDR5-8000) | 280 GB/s (GDDR6) |
70+
71+
However, prefill is a bit faster on the nvidia card:
72+
73+
```
74+
$ time OLLAMA_MODEL=qwen3:14b OLLAMA_HOST=http://ada:11434 ./one -m "how warm is it in leipzig?"
75+
2025/11/26 09:57:17 user: how warm is it in leipzig? ...
76+
2025/11/26 09:57:17 context length: 4974 ...
77+
2025/11/26 09:57:23 assistant wants to call 1 tool(s) ...
78+
2025/11/26 09:57:23 calling tool: get_weather ...
79+
2025/11/26 09:57:23 args: {"city":"Leipzig"} ...
80+
2025/11/26 09:57:23 Result: {"city": "Leipzig", "temperature": ...
81+
2025/11/26 09:57:23 context length: 5227 ...
82+
2025/11/26 09:57:30 assistant: The current temperature in Leipzig i...
83+
84+
real 0m13.423s
85+
user 0m0.001s
86+
sys 0m0.013s
87+
88+
$ time OLLAMA_MODEL=qwen3:14b OLLAMA_HOST=http://strix:11434 ./one -m "how warm is it in leipzig?"
89+
2025/11/26 09:57:34 user: how warm is it in leipzig? ...
90+
2025/11/26 09:57:34 context length: 4974
91+
2025/11/26 09:57:41 assistant wants to call 1 tool(s)
92+
2025/11/26 09:57:41 calling tool: get_weather
93+
2025/11/26 09:57:41 args: {"city":"Leipzig"}
94+
2025/11/26 09:57:41 Result: {"city": "Leipzig", "temperature"...
95+
2025/11/26 09:57:41 context length: 5227
96+
2025/11/26 09:57:50 assistant: The current temperature in Leipzig...
97+
98+
real 0m15.826s
99+
user 0m0.007s
100+
sys 0m0.007s
101+
```
102+
103+
Still, the interplay is interesting to observe. Requests like *"save the
104+
temperature in leipzig to temp.txt"* or *"fetch
105+
[https://golangleipzig.space/leipzig-gopher.png](https://golangleipzig.space/leipzig-gopher.png)
106+
and convert it to jpg"* work with a 9.3GB 14B tool supporting LLM like
107+
[Qwen3-14B](https://huggingface.co/Qwen/Qwen3-14B).
108+
109+
> Expertise in agent capabilities, enabling precise integration with external
110+
> tools in both thinking and unthinking modes and achieving leading performance
111+
> among open-source models in complex agent-based tasks. -- [model card](https://huggingface.co/Qwen/Qwen3-14B)
112+
113+
Example: (1) fetch image, (2) convert to jpg, (3) calculate sha1 and (4) write the result to a file (speedup 1.5x):
114+
115+
![](/images/lgo-56-agent-3.gif)
116+
117+
Future ideas for tools:
118+
119+
* [ ] browser use to facility web search
120+
* [ ] manage context by offloading to text files, similar to deep research agents
121+
* [ ] code snippets for subtasks and sandboxed execution
122+
123+
Go's concurrency facilities seems to be helpful when implementing agents.
37124

38125
### Misc
39126

127+
* There is no shortage of agent frameworks, e.g.
128+
[tRPC-Agent-Go](https://github.com/trpc-group/trpc-agent-go),
129+
[eino](https://github.com/cloudwego/eino),
130+
[genkit](https://genkit.dev/docs/get-started/?lang=go),
131+
[swarmgo](https://github.com/prathyushnallamothu/swarmgo),
132+
[go-agent](https://github.com/vitalii-honchar/go-agent),
133+
[suricata](https://github.com/ostafen/suricata),
134+
[agent-sdk-go](https://github.com/Ingenimax/agent-sdk-go), and many more in Go
135+
or [any language](https://www.shakudo.io/blog/top-9-ai-agent-frameworks)
136+
* [KI BARCAMP HALLE (SAALE) 2025-11-29](https://www.klaustor-coworking.de/events-1/ki-barcamp-2025)
40137
* [go4lage gemini CV](https://go4lage.com/geminicv), for *escaping vendor lock-in*
138+
* [Can Google's ADK Replace LangChain and MCP? (with Christina Lin)](https://www.youtube.com/watch?v=nMnQ63YkftE)
139+
* AI will be similar to the internet, e.g. in terms of omnipresence
140+
* AI [uncanny valley](https://en.wikipedia.org/wiki/Uncanny_valley), 不気味の谷
41141

142+
Did you implement a cool agent in Go (or something else)? Then why not [join
143+
us](https://www.meetup.com/de-DE/leipzig-golang/) and let it introduce itself.
42144

43145
----
44146

static/images/lgo-56-agent-3.gif

385 KB
Loading

static/images/lgo-56-looptool.gif

29.2 KB
Loading

0 commit comments

Comments
 (0)