mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-16 01:29:55 +00:00
release v1.0.1
This commit is contained in:
59
main.go
59
main.go
@@ -1,27 +1,42 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"os/user"
|
||||
"path"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/asrul/linux-command-gpt/gpt"
|
||||
"github.com/asrul/linux-command-gpt/reader"
|
||||
"github.com/atotto/clipboard"
|
||||
"github.com/direct-dev-ru/linux-command-gpt/gpt"
|
||||
"github.com/direct-dev-ru/linux-command-gpt/reader"
|
||||
)
|
||||
|
||||
const (
|
||||
HOST = "https://api.openai.com/v1/"
|
||||
COMPLETIONS = "chat/completions"
|
||||
MODEL = "gpt-4o-mini"
|
||||
PROMPT = "Reply with linux command and nothing else. No need explanation. No need code blocks"
|
||||
//go:embed VERSION.txt
|
||||
var Version string
|
||||
|
||||
var cwd, _ = os.Getwd()
|
||||
|
||||
var (
|
||||
HOST = getEnv("LCG_HOST", "http://192.168.87.108:11434/")
|
||||
COMPLETIONS = getEnv("LCG_COMPLETIONS_PATH", "api/chat") // relative part of endpoint
|
||||
MODEL = getEnv("LCG_MODEL", "codegeex4")
|
||||
PROMPT = getEnv("LCG_PROMPT", "Reply with linux command and nothing else. Output with plain response - no need formatting. No need explanation. No need code blocks. No need ` symbols.")
|
||||
API_KEY_FILE = getEnv("LCG_API_KEY_FILE", ".openai_api_key")
|
||||
RESULT_FOLDER = getEnv("LCG_RESULT_FOLDER", path.Join(cwd, "gpt_results"))
|
||||
|
||||
// HOST = "https://api.openai.com/v1/"
|
||||
// COMPLETIONS = "chat/completions"
|
||||
|
||||
// MODEL = "gpt-4o-mini"
|
||||
// MODEL = "codellama:13b"
|
||||
|
||||
// This file is created in the user's home directory
|
||||
// Example: /home/username/.openai_api_key
|
||||
API_KEY_FILE = ".openai_api_key"
|
||||
// API_KEY_FILE = ".openai_api_key"
|
||||
|
||||
HELP = `
|
||||
|
||||
@@ -37,7 +52,7 @@ Example Usage: lcg I want to extract linux-command-gpt.tar.gz file
|
||||
Example Usage: lcg --file /path/to/file.json I want to print object questions with jq
|
||||
`
|
||||
|
||||
VERSION = "0.2.1"
|
||||
VERSION = Version
|
||||
CMD_HELP = 100
|
||||
CMD_VERSION = 101
|
||||
CMD_UPDATE = 102
|
||||
@@ -45,6 +60,14 @@ Example Usage: lcg --file /path/to/file.json I want to print object questions wi
|
||||
CMD_COMPLETION = 110
|
||||
)
|
||||
|
||||
// getEnv retrieves the value of the environment variable `key` or returns `defaultValue` if not set.
|
||||
func getEnv(key, defaultValue string) string {
|
||||
if value, exists := os.LookupEnv(key); exists {
|
||||
return value
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func handleCommand(cmd string) int {
|
||||
if cmd == "" || cmd == "--help" || cmd == "-h" {
|
||||
return CMD_HELP
|
||||
@@ -118,6 +141,10 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := os.Stat(RESULT_FOLDER); os.IsNotExist(err) {
|
||||
os.MkdirAll(RESULT_FOLDER, 0755)
|
||||
}
|
||||
|
||||
h := handleCommand(cmd)
|
||||
|
||||
if h == CMD_HELP {
|
||||
@@ -157,10 +184,10 @@ func main() {
|
||||
c = "N"
|
||||
fmt.Printf("Completed in %v seconds\n\n", elapsed)
|
||||
fmt.Println(r)
|
||||
fmt.Print("\nDo you want to (c)opy, (r)egenerate, or take (N)o action on the command? (c/r/N): ")
|
||||
fmt.Print("\nDo you want to (c)opy, (s)ave to file, (r)egenerate, or take (N)o action on the command? (c/r/N): ")
|
||||
fmt.Scanln(&c)
|
||||
|
||||
// No action
|
||||
// no action
|
||||
if c == "N" || c == "n" {
|
||||
return
|
||||
}
|
||||
@@ -176,4 +203,14 @@ func main() {
|
||||
fmt.Println("\033[33mCopied to clipboard")
|
||||
return
|
||||
}
|
||||
|
||||
if c == "S" || c == "s" {
|
||||
timestamp := time.Now().Format("2006-01-02_15-04-05") // Format: YYYY-MM-DD_HH-MM-SS
|
||||
filename := fmt.Sprintf("gpt_request_%s(%s).md", timestamp, gpt3.Model)
|
||||
filePath := path.Join(RESULT_FOLDER, filename)
|
||||
resultString := fmt.Sprintf("## Prompt:\n\n%s\n\n------------------\n\n## Response:\n\n%s\n\n", cmd+". "+gpt3.Prompt, r)
|
||||
os.WriteFile(filePath, []byte(resultString), 0644)
|
||||
fmt.Println("\033[33mSaved to file")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user