Compare commits

..

1 Commits

Author SHA1 Message Date
will.anderson 53fb75353f fix(chat): remove duplicate web_search tool in agentic_tools_all
Neuron Soul CI / build (pull_request) Failing after 5m24s
agentic_tools_literal() already contains a custom web_search tool.
agentic_tools_with_web() adds the Anthropic server-side web_search_20250305
tool (also named web_search). Combining them caused Anthropic to reject
every agentic request with 'Tool names must be unique.'

agentic_tools_all() now calls agentic_tools_literal() directly. Connector
tools splice in as before. The web_search-only variant (agentic_tools_with_web)
is unchanged for callers that specifically want native search without connectors.
2026-06-17 14:11:50 -05:00
2 changed files with 31 additions and 13 deletions
+25 -10
View File
@@ -91,29 +91,44 @@ jobs:
echo "El SDK ready"
/opt/el/dist/platform/elc --version || true
- name: Generate ELP master declarations header
run: |
{
printf '/* Auto-generated C forward declarations for ELP cross-module calls */\n'
printf '#pragma once\n'
printf '#include "el_runtime.h"\n'
printf '\n'
grep -h -E '^(el_val_t|void|int|char\*|const char\*)[[:space:]]+[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*\(' dist/*.c 2>/dev/null \
| grep ';$' | sort -u
} > dist/elp-c-decls.h
echo "Generated elp-c-decls.h with $(grep -c ';' dist/elp-c-decls.h 2>/dev/null || echo 0) declarations"
- name: Build neuron soul binary
run: |
ELB=/opt/el/dist/bin/elb
ELC=/opt/el/dist/platform/elc
RUNTIME=/opt/el/runtime
# Compile all El modules to C via elb.
# elb fails at link on Linux (GNU ld rejects duplicate strong symbols that
# macOS ld accepts silently) — that's expected and captured with || true.
# The important output is dist/soul.c: the El compiler inlines all imported
# modules into the entry-point file, so soul.c is a self-contained
# translation unit. We never link the other dist/*.c files — they contain
# the same symbols inlined again, plus capability-violation #error guards
# that fire when compiled outside the cgi entrypoint.
# Compile all El modules to C.
# This step will fail at link on Linux: the El compiler inlines imported
# modules into each module's .c file, producing duplicate strong symbol
# definitions. GNU ld rejects these; macOS ld accepts them silently.
# We capture the link failure and re-link manually below.
$ELB --elc=$ELC --runtime=$RUNTIME/el_runtime.c || true
# Link only soul.c + the runtime. No --allow-multiple-definition needed.
# Re-link with soul.c listed first so its real main() (from the cgi block)
# wins over the stub main()s generated in every other module.
# --allow-multiple-definition tells GNU ld to pick the first definition
# for each duplicate symbol — safe here because all duplicates are identical
# (same El source compiled independently into multiple .c files).
mkdir -p dist
OTHER_C=$(ls dist/*.c | grep -v '/soul\.c$' | sort | tr '\n' ' ')
cc -O2 -DHAVE_CURL \
-I$RUNTIME \
dist/soul.c \
dist/soul.c $OTHER_C \
$RUNTIME/el_runtime.c \
-lssl -lcrypto -lcurl -lpthread -lm \
-Wl,--allow-multiple-definition \
-o dist/neuron
ls -lh dist/neuron
+6 -3
View File
@@ -317,10 +317,13 @@ fn connector_tools_json() -> String {
return arr
}
// Built-in tools + native web_search + every connector tool, as one tools array.
// Splices connector tools in before the closing bracket of the base array.
// Built-in tools + every connector tool, as one tools array.
// Uses agentic_tools_literal (not agentic_tools_with_web) to avoid a duplicate
// "web_search" name the literal already includes a custom web_search handler,
// and adding the Anthropic server-side web_search_20250305 (same name) causes
// Anthropic to reject with "Tool names must be unique."
fn agentic_tools_all() -> String {
let base: String = agentic_tools_with_web()
let base: String = agentic_tools_literal()
let conn: String = connector_tools_json()
let conn_inner: String = str_slice(conn, 1, str_len(conn) - 1)
if str_eq(conn_inner, "") {