diff --git a/src/agent/Agent.zig b/src/agent/Agent.zig index 090f33a1..88de3bf7 100644 --- a/src/agent/Agent.zig +++ b/src/agent/Agent.zig @@ -36,7 +36,7 @@ const CDPNode = @import("../cdp/Node.zig"); const Terminal = @import("Terminal.zig"); const SlashCommand = @import("SlashCommand.zig"); const settings = @import("settings.zig"); -const truncateUtf8 = @import("../string.zig").truncateUtf8; +const string = @import("../string.zig"); const Agent = @This(); @@ -186,7 +186,7 @@ fn reconcileModel( var arena: std.heap.ArenaAllocator = .init(allocator); defer arena.deinit(); const ids: []const []const u8 = zenai.provider.listChatModelIds(allocator, arena.allocator(), llm.provider, llm.key, base_url) catch &.{}; - if (ids.len == 0 or containsString(ids, desired)) return .{ .use = try allocator.dupe(u8, desired) }; + if (ids.len == 0 or string.isOneOf(desired, ids)) return .{ .use = try allocator.dupe(u8, desired) }; if (!explicit) { if (llm.provider != .ollama) return .{ .use = try allocator.dupe(u8, desired) }; @@ -684,7 +684,7 @@ fn handleVerbosity(self: *Agent, rest: []const u8) void { return; } const level = std.meta.stringToEnum(Config.AgentVerbosity, rest) orelse { - self.terminal.printError("usage: /verbosity (got {s})", .{rest}); + self.terminal.printError("usage: /verbosity " ++ Config.tagHint(Config.AgentVerbosity) ++ " (got {s})", .{rest}); return; }; self.terminal.verbosity = level; @@ -697,7 +697,7 @@ fn handleEffort(self: *Agent, rest: []const u8) void { return; } const level = std.meta.stringToEnum(Config.Effort, rest) orelse { - self.terminal.printError("usage: /effort (got {s})", .{rest}); + self.terminal.printError("usage: /effort " ++ Config.tagHint(Config.Effort) ++ " (got {s})", .{rest}); return; }; self.effort = level; @@ -788,7 +788,7 @@ fn handleModel(self: *Agent, _: std.mem.Allocator, rest: []const u8) void { } const ids = completionModels(self, self.allocator); // Empty list = fetch failed or unlisted local models; can't confirm, so allow. - if (ids.len != 0 and !containsString(ids, trimmed)) { + if (ids.len != 0 and !string.isOneOf(trimmed, ids)) { self.terminal.printError("unknown model: {s} (Tab to list)", .{trimmed}); return; } @@ -797,13 +797,6 @@ fn handleModel(self: *Agent, _: std.mem.Allocator, rest: []const u8) void { }; } -fn containsString(haystack: []const []const u8, needle: []const u8) bool { - for (haystack) |s| { - if (std.mem.eql(u8, s, needle)) return true; - } - return false; -} - /// Persist the current provider/model/effort/verbosity to `.lp-agent.zon` and report it /// as "