diff --git a/autoload/copilot_chat.vim b/autoload/copilot_chat.vim index b12985f..460f109 100644 --- a/autoload/copilot_chat.vim +++ b/autoload/copilot_chat.vim @@ -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 = { 'role': role } + if role == 'user' + prepped_message['content'] = [ + { + 'type': 'input_text', + 'text': '' .. message .. '' + } + ] + 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 diff --git a/autoload/copilot_chat/api.vim b/autoload/copilot_chat/api.vim index f732d4d..7c11244 100644 --- a/autoload/copilot_chat/api.vim +++ b/autoload/copilot_chat/api.vim @@ -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 = [ @@ -64,13 +64,24 @@ enddef var curl_output: list = [] -export def AsyncRequest(messages: list, file_list: list): job +export def AsyncRequest(user_messages: list, file_list: list): 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': '\n\nalways include emojis on the first line of your response' + } + ] + }) + for mess in user_messages + messages->add(mess) + endfor - # for knowledge bases its just an attachment as the content - # {'content': '\n#kb:\n', 'role': 'user'} - # for files similar for file in file_list var file_content: list = readfile(file) var full_path: string = fnamemodify(file, ': p') @@ -82,11 +93,8 @@ export def AsyncRequest(messages: list, file_list: list): 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() @@ -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