From 2947722af45a3d6d3bd6b19455613c79c1d26d98 Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Thu, 11 May 2023 16:14:04 +0800 Subject: [PATCH] update package data --- README.md | 48 +++++++++++++++++++++++++-------------------- assets/devchat.png | Bin 12308 -> 4801 bytes package.json | 10 +++++++--- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index a908522..497c0db 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,47 @@ # DevChat -DevChat is a programming assistant that helps developers, testers, and operations staff automate many tasks. +![DevChat Logo](assets/devchat.png) + +DevChat is a Visual Studio Code extension that allows you to chat with an AI-powered bot to help you with your coding tasks. Write prompts, not code. ## Features -- Generate code driven by questions -- Create smarter commit messages - -## Requirements - -- Python package: `pip install devchat` -- System package: `apt install dtm` -- Set your `OPENAI_API_KEY` environment variable +- Chat with an AI-powered bot to get coding assistance +- Add code snippets or files to the chat for context +- Configure AI model settings ## Installation -Search for "DevChat" in the Visual Studio Code marketplace and click the "Install" button. +1. Open Visual Studio Code +2. Press `Ctrl+P` to open the Quick Open dialog +3. Type `ext install merico.devchat` and press `Enter` +4. Install devchat package by `pip install devchat` +5. setting your OPENAI_API_KEY in setting/DevChat ## Usage -Enter "DevChat" in the command palette to open the interactive page. +1. Open the chat panel by clicking on the "Chat with Bot" view in the Explorer or by running the "DevChat" command from the Command Palette (`Ctrl+Shift+P`). +2. Type your question or prompt in the input field and press `Enter` to send it to the AI bot. +3. To add code snippets or files to the chat, right-click on the selected code or file in the editor and choose "Add to DevChat" from the context menu. -## Settings +## Configuration -*Coming soon* +You can configure the following settings in your `settings.json` file: -## Known Issues - -*Coming soon* - -## Release Notes - -*Coming soon* +- `DevChat.llmModel`: Select the AI model to use (default: "OpenAI"). +- `DevChat.maxLogCount`: Limit the number of prompts to output (default: 20). +- `DevChat.logSkip`: Skip a number of prompts before showing the prompt history (default: 0). +- `DevChat.OpenAI.model`: Specify the AI model (default: "gpt-4"). +- `DevChat.OpenAI.temperature`: Specify the AI model temperature (default: 0.2). +- `DevChat.OpenAI.stream`: Specify the AI model stream (default: true). +- `DevChat.OpenAI.tokensPerPrompt`: Specify the number of tokens for each prompt (default: 6000). +- `DevChat.OpenAI.useHistoryPrompt`: Use history prompts as context (default: true). +- `DevChat.OpenAI.apiKey`: OpenAI API Key (default: ""). +- `DevChat.OpenAI.EndPoint`: OpenAI API server (default: ""). ## Contributing -*Coming soon* +If you have any suggestions or issues, please feel free to open an issue or submit a pull request on the [GitHub repository](https://github.com/covespace/devchat-vscode.git). ## License diff --git a/assets/devchat.png b/assets/devchat.png index c5b579652a5249e083d30bd368140b0cdf307f18..ef6d4f771052c466e6983d362513a0e8d2b91519 100644 GIT binary patch literal 4801 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

qmCsKq;App(NIUGrzhi69>E_|sQeCypvA*zJ{ zKoGE^hQ?Bj;v~YCnZJC|>ISB^XjJXsTklAUNka%6pbbjTzqqpBudr)x?n2?5MTBJ3 zl335L-w>jZDY3jeq;l{>cQKWb@+VVJ3Yh-;)qC54$~%y ziMzNHmsHOS5KEFH;scy)v~A})fP2OnJC^3)TYrZ#AWgrZIZ^NI`Tix!5S8@=%?ech z;^N#$8us3c%=^UKl|@)d+|&kZ!K~-UqE_;#BJ(qY@B!x+3oqog|4>J8FXk5?zL53c zgX~X=aAEldX7QA`ij5jBPNM8S3tR6;t^(j-7nm5s8^|n7+GX3>&-i+@5CDe_APCwF zyn|K(;ILeRjs#LKH3!-ayn~hk-~b2u<;zBT(_@7wW`;|`1eAGBHF|*AFMPfHOXFr%mVXDyw b+l&7LL@nN(s+otr00000NkvXXu0mjfKB)}h literal 12308 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