Skip to content

Commit d8410fd

Browse files
committed
feat(lualine): display status based on n_finished_requests
1 parent c1179fb commit d8410fd

File tree

3 files changed

+67
-7
lines changed

3 files changed

+67
-7
lines changed

lua/minuet/backends/common.lua

+44-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ local M = {}
22
local utils = require 'minuet.utils'
33
local Job = require 'plenary.job'
44
local uv = vim.uv or vim.loop
5-
local api = vim.api
65

76
-- currently running completion jobs, basically forked curl processes
87
M.current_jobs = {}
@@ -11,7 +10,6 @@ M.current_jobs = {}
1110
function M.register_job(job)
1211
table.insert(M.current_jobs, job)
1312
utils.notify('Registered completion job', 'debug')
14-
api.nvim_exec_autocmds('User', { pattern = 'MinuetRequestStarted' })
1513
end
1614

1715
---@param job Job
@@ -20,7 +18,6 @@ function M.remove_job(job)
2018
if j.pid == job.pid then
2119
table.remove(M.current_jobs, i)
2220
utils.notify('Completion job ' .. job.pid .. ' finished and removed from current_jobs', 'debug')
23-
api.nvim_exec_autocmds('User', { pattern = 'MinuetRequestFinished' })
2421
break
2522
end
2623
end
@@ -127,12 +124,26 @@ function M.complete_openai_base(options, context, callback)
127124
table.insert(args, config.proxy)
128125
end
129126

127+
local provider_name = 'openai_compatible'
128+
utils.fire_event('RequestInit', {
129+
provider = provider_name,
130+
name = options.name,
131+
n_requests = 1,
132+
})
133+
130134
local new_job = Job:new {
131135
command = 'curl',
132136
args = args,
133137
on_exit = vim.schedule_wrap(function(job, exit_code)
134138
M.remove_job(job)
135139

140+
utils.fire_event('RequestFinished', {
141+
provider = provider_name,
142+
name = options.name,
143+
n_requests = 1,
144+
request_idx = 1,
145+
})
146+
136147
local items_raw
137148

138149
if options.stream then
@@ -158,6 +169,14 @@ function M.complete_openai_base(options, context, callback)
158169
}
159170

160171
M.register_job(new_job)
172+
173+
utils.fire_event('RequestStarted', {
174+
provider = provider_name,
175+
name = options.name,
176+
n_requests = 1,
177+
request_idx = 1,
178+
})
179+
161180
new_job:start()
162181
end
163182

@@ -188,7 +207,13 @@ function M.complete_openai_fim_base(options, get_text_fn, context, callback)
188207
local items = {}
189208
local n_completions = config.n_completions
190209

191-
for _ = 1, n_completions do
210+
local provider_name = 'openai_fim_compatible'
211+
utils.fire_event('RequestInit', {
212+
provider = provider_name,
213+
name = options.name,
214+
n_requests = n_completions,
215+
})
216+
for request_idx = 1, n_completions do
192217
local args = {
193218
'-L',
194219
options.end_point,
@@ -215,6 +240,13 @@ function M.complete_openai_fim_base(options, get_text_fn, context, callback)
215240
on_exit = vim.schedule_wrap(function(job, exit_code)
216241
M.remove_job(job)
217242

243+
utils.fire_event('RequestFinished', {
244+
provider = provider_name,
245+
name = options.name,
246+
n_requests = n_completions,
247+
request_idx = request_idx,
248+
})
249+
218250
local result
219251

220252
if options.stream then
@@ -234,6 +266,14 @@ function M.complete_openai_fim_base(options, get_text_fn, context, callback)
234266
}
235267

236268
M.register_job(new_job)
269+
270+
utils.fire_event('RequestStarted', {
271+
provider = provider_name,
272+
name = options.name,
273+
n_requests = n_completions,
274+
request_idx = request_idx,
275+
})
276+
237277
new_job:start()
238278
end
239279
end

lua/minuet/lualine.lua

+17-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ local M = require('lualine.component'):extend()
22

33
M.processing = false
44
M.spinner_index = 1
5+
M.n_requests = 1
6+
M.n_finished_requests = 0
7+
M.name = 'unknown'
58

69
local spinner_symbols = {
710
'',
@@ -27,10 +30,20 @@ function M:init(options)
2730
pattern = 'MinuetRequest*',
2831
group = group,
2932
callback = function(request)
30-
if request.match == 'MinuetRequestStarted' then
33+
local data = request.data
34+
35+
if request.match == 'MinuetRequestInit' then
36+
self.processing = false
37+
self.n_requests = data.n_requests
38+
self.n_finished_requests = 0
39+
self.name = data.name
40+
elseif request.match == 'MinuetRequestStarted' then
3141
self.processing = true
3242
elseif request.match == 'MinuetRequestFinished' then
33-
self.processing = false
43+
self.n_finished_requests = self.n_finished_requests + 1
44+
if self.n_finished_requests == self.n_requests then
45+
self.processing = false
46+
end
3447
end
3548
end,
3649
})
@@ -40,7 +53,8 @@ end
4053
function M:update_status()
4154
if self.processing then
4255
self.spinner_index = (self.spinner_index % spinner_symbols_len) + 1
43-
return spinner_symbols[self.spinner_index]
56+
local request = string.format('%s: %s/%s', self.name, self.n_finished_requests, self.n_requests)
57+
return request .. ' ' .. spinner_symbols[self.spinner_index]
4458
else
4559
return nil
4660
end

lua/minuet/utils.lua

+6
Original file line numberDiff line numberDiff line change
@@ -488,4 +488,10 @@ M.list_dedup = function(list)
488488
return items_cleaned
489489
end
490490

491+
--- fire an event
492+
function M.fire_event(event, opts)
493+
opts = opts or {}
494+
vim.api.nvim_exec_autocmds('User', { pattern = 'Minuet' .. event, data = opts })
495+
end
496+
491497
return M

0 commit comments

Comments
 (0)