CodeGPT Sublime Text 插件

问题描述 投票:0回答:1

我最近为 Sublime Text 开发了一个 ChatGPT 插件,该插件旨在通过使用户能够直接将代码片段以及特定问题发送到 ChatGPT 来增强编码体验。这种集成旨在提供快速、智能的响应,促进更顺畅的编码工作流程。

但是,我在 Sublime Text 中遇到显示问题,其中 ChatGPT 响应的格式未正确呈现。

import os
import sublime
import sublime_plugin
import http.client
import requests
import json

OPENAI_API_KEY = ""

class SendToGptCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        # Capture the selected text
        self.selected_text = ''
        for region in self.view.sel():
            if not region.empty():
                self.selected_text = self.view.substr(region)
        
        # Prompt the user for additional input
        self.view.window().show_input_panel("Enter your question:", "", self.on_done, None, None)

    def on_done(self, user_input):
        code = textwrap.dedent(self.selected_text)

        # Combine the user's question with the selected text
        data = {
            'code': code,
            'question': user_input
        }

        # Send the data as an HTTP request
        self.send_http_request(data)

    def send_http_request(self, data):
        url = 'https://api.openai.com/v1/chat/completions'
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {OPENAI_API_KEY}'
        }

        req = {
            'model': 'gpt-3.5-turbo',
            'messages': [
                {
                    'role': 'system',
                    'content': 'You are a helpful coding assistant.'
                },
                {
                    'role': 'system',
                    'content': f"context code:```{data['code']}```"
                },
                {
                    'role': 'user',
                    'content': f"question: {data['question']}"
                }
            ]
        }

        # Initialize result
        result = ""
        
        try:
            response = requests.post(url, headers=headers, data=json.dumps(req))
            response.raise_for_status()  # Raise exception if the request was not successful
            response_json = response.json()

            # Get the HTTP response and extract the completion
            if 'choices' in response_json:
                choices = response_json['choices']
                messages = []  # List to store messages

                for choice in choices:
                    # Extract 'message' from each choice
                    if 'message' in choice:
                        messages.append(choice['message']['content'])
                    else:
                        messages.append("message field not found in choice")
                
                # Join messages into a single string
                result = " ".join(messages)

            else:
                result = "Choices field not found in response"

        except (requests.RequestException, json.JSONDecodeError) as err:
            result = f"Error occurred during request: {str(err)}"
        
        self.display_result(data['question'], data['code'], result)

    def display_result(self, question, code, result):
        # Create a new buffer (tab)
        new_view = self.view.window().new_file()

        # Set the syntax to Markdown
        new_view.set_syntax_file("Packages/Markdown/Markdown.sublime-syntax")
        
        # Insert the question, code, and response
        content = f"""Question Asked:\n\n{question}\n\n"""
        new_view.run_command('insert', {'characters': content})

        content = f"""Code:\n{code}\n\n"""
        new_view.run_command('insert', {'characters': content})

        content = f"""Response:\n{result}\n\n"""
        new_view.run_command('insert', {'characters': content})

回复如下:

Question Asked:

Lets test this code ?

Code:
def display_result(self, question, code, result):
    print(code)
        code = textwrap.dedent(code)
            print(code)
                # Create a new buffer (tab)
                    new_view = self.view.window().new_file()

                        # Set the syntax to Markdown
                            new_view.set_syntax_file("Packages/Markdown/Markdown.sublime-syntax")

                                # Insert the question, code, and response
                                    content = f"""Question Asked:\n\n{question}\n\n"""
                                        new_view.run_command('insert', {'characters': content})

                                            content = f"""Code:\n{code}\n\n"""
                                                new_view.run_command('insert', {'characters': content})

                                                    content = f"""Response:\n{result}\n\n"""
                                                        new_view.run_command('insert', {'characters': content})

                                                        Response:
                                                        Sure, please provide the code that you would like to test.

                                                        

这就是响应的样子。

Question Asked:

Lets test this code ?

Code:
def display_result(self, question, code, result):
    print(code)
    code = textwrap.dedent(code)
    print(code)
    # Create a new buffer (tab)
    new_view = self.view.window().new_file()

    # Set the syntax to Markdown
    new_view.set_syntax_file("Packages/Markdown/Markdown.sublime-syntax")

    # Insert the question, code, and response
    content = f"""Question Asked:\n\n{question}\n\n"""
    new_view.run_command('insert', {'characters': content})

    content = f"""Code:\n{code}\n\n"""
    new_view.run_command('insert', {'characters': content})

    content = f"""Response:\n{result}\n\n"""
    new_view.run_command('insert', {'characters': content})

Response:
Sure, please provide the code that you would like to test.

我不确定为什么有这些额外的空格/制表符。

感谢您的帮助。

python sublimetext openai-api sublime-text-plugin
1个回答
0
投票

使用

'append'
代替
'insert'
或关闭自动缩进:
new_view.settings().set('auto_indent', False)

© www.soinside.com 2019 - 2024. All rights reserved.