Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion autoload/copilot_chat.vim
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,29 @@ export def SubmitMessage(): void
endfor
var message: string = join(lines, "\n")

add(messages, {'content': message, 'role': role})
#add(messages, {'content': message, 'role': role})
var prepped_message: dict<any> = { 'role': role }
if role == 'user'
prepped_message['content'] = [
{
'type': 'input_text',
'text': '<prompt>' .. message .. '</prompt>'
}
]
else
prepped_message['content'] = [
{
'type': 'output_text',
'text': message,
'annotations': []
}
]
prepped_message['type'] = 'message'
prepped_message['status'] = 'completed'
endif

messages->add(prepped_message)

add(all_file_lists, file_list)
cursor(line('.'), col('.') + 1)
endwhile
Expand Down
32 changes: 21 additions & 11 deletions autoload/copilot_chat/api.vim
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def UserStatsClose(winid: number, key: string): number
return 1
enddef

export def GetUsage()
export def GetUsage(): void
var device_token_file: string = $'{g:copilot_chat_data_dir}/.device_token'
var bearer_token = join(readfile(device_token_file), "\n")
var token_headers = [
Expand Down Expand Up @@ -64,13 +64,24 @@ enddef

var curl_output: list<string> = []

export def AsyncRequest(messages: list<any>, file_list: list<any>): job
export def AsyncRequest(user_messages: list<any>, file_list: list<any>): job
curl_output = []
var url: string = 'https://api.githubcopilot.com/chat/completions'
#var url: string = 'https://api.githubcopilot.com/chat/completions'
var url: string = 'https://api.githubcopilot.com/responses'
var messages = []
messages->add({
'role': 'system',
'content': [
{
'type': 'input_text',
'text': '<instructions>\n<attachment filePath=\"/Users/danbradbury/Documents/Github/vinter/.github/copilot-instructions.md\">\nalways include emojis on the first line of your response</instructions>'
}
]
})
for mess in user_messages
messages->add(mess)
endfor

# for knowledge bases its just an attachment as the content
# {'content': '<attachment id="kb:Name">\n#kb:\n</attachment>', 'role': 'user'}
# for files similar
for file in file_list
var file_content: list<string> = readfile(file)
var full_path: string = fnamemodify(file, ': p')
Expand All @@ -82,11 +93,8 @@ export def AsyncRequest(messages: list<any>, file_list: list<any>): job
var data: string = json_encode({
'intent': false,
'model': models.Current(),
'temperature': 0,
'top_p': 1,
'n': 1,
'stream': true,
'messages': messages
'input': messages
})

var tmpfile: string = tempname()
Expand Down Expand Up @@ -131,13 +139,15 @@ def HandleJobOutput(channel: any, msg: any): void
enddef

def HandleJobClose(channel: any, msg: any)
echom curl_output
deletebufline(g:copilot_chat_active_buffer, '$')
var result = ''
for line in curl_output
if line =~? '^data: {'
var json_completion = json_decode(strcharpart(line, 6))
try
var content = json_completion.choices[0].delta.content
#var content = json_completion.choices[0].delta.content
var content = json_completion.item.content[0].text
if type(content) != type(v:null)
result ..= content
endif
Expand Down