11---
22title : " Hybrid Meetup #56 wrap-up"
33date : 2025-11-26T00:30:00+01:00
4- draft : true
4+ draft : false
55tags :
66- summary
77- meetup
88---
99
10- ### An older version of the matrix
10+ ### An older version of the matrix / 不気味の谷
1111
1212Hybrid 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
1922An 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
0 commit comments