111 lines
2.1 KiB
Lua
111 lines
2.1 KiB
Lua
local _VERSION = '0.4.1';
|
|
|
|
local createAi = require('/apis/libai');
|
|
|
|
local args = table.pack(...);
|
|
|
|
local function printUsage()
|
|
print('ai usage:');
|
|
print();
|
|
print(' ai <prompt>');
|
|
print(' ai ping');
|
|
print(' ai new <prompt>');
|
|
print(' ai --new <prompt>');
|
|
print(' ai sessions');
|
|
print(' ai --sessions');
|
|
print(' ai --version');
|
|
print(' ai --help');
|
|
print();
|
|
print('settings required:');
|
|
print(' opencc.server_url');
|
|
print();
|
|
print('settings optional:');
|
|
print(' opencc.username (default: opencode)');
|
|
print(' opencc.password (Basic Auth password)');
|
|
print(' opencc.session_id (auto-managed)');
|
|
end
|
|
|
|
local function joinArgs(start)
|
|
local parts = {};
|
|
for i = start, args.n do
|
|
parts[#parts + 1] = args[i];
|
|
end
|
|
return table.concat(parts, ' ');
|
|
end
|
|
|
|
local function printSessions(ai)
|
|
local ok, result = ai.listSessions();
|
|
if not ok then
|
|
print(result);
|
|
return;
|
|
end
|
|
if #result == 0 then
|
|
print('no sessions');
|
|
else
|
|
for _, s in ipairs(result) do
|
|
print((s.id or '?') .. ' ' .. (s.title or '(untitled)'));
|
|
end
|
|
end
|
|
end
|
|
|
|
local function askAndPrint(ai, prompt)
|
|
local ok, result = ai.ask(prompt);
|
|
if not ok then
|
|
print(result);
|
|
return;
|
|
end
|
|
print(result.reply);
|
|
end
|
|
|
|
local command = args[1];
|
|
|
|
if command == '--version' or command == '-version' or command == 'version' then
|
|
print('ai v' .. _VERSION);
|
|
return;
|
|
end
|
|
|
|
if command == '--help' or command == '-help' or command == 'help' then
|
|
printUsage();
|
|
return;
|
|
end
|
|
|
|
if args.n == 0 then
|
|
printUsage();
|
|
return;
|
|
end
|
|
|
|
local ai = createAi();
|
|
|
|
if (command == 'sessions' or command == '--sessions') and args.n == 1 then
|
|
printSessions(ai);
|
|
return;
|
|
end
|
|
|
|
if command == 'ping' and args.n == 1 then
|
|
local ok, result = ai.ping();
|
|
if not ok then
|
|
print(result);
|
|
return;
|
|
end
|
|
print(result.reply);
|
|
return;
|
|
end
|
|
|
|
if command == 'new' or command == '--new' then
|
|
local prompt = joinArgs(2);
|
|
if prompt == '' then
|
|
printUsage();
|
|
return;
|
|
end
|
|
ai.clearSession();
|
|
askAndPrint(ai, prompt);
|
|
return;
|
|
end
|
|
|
|
if string.sub(command, 1, 1) == '-' then
|
|
printUsage();
|
|
return;
|
|
end
|
|
|
|
askAndPrint(ai, joinArgs(1));
|