diff --git a/pkg/config/config.go b/pkg/config/config.go index eafdb00..b6d4e0b 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -157,30 +157,28 @@ type DevicesConfig struct { } type ProvidersConfig struct { - Anthropic ProviderConfig `json:"anthropic"` - OpenAI ProviderConfig `json:"openai"` - OpenRouter ProviderConfig `json:"openrouter"` - Groq ProviderConfig `json:"groq"` - Zhipu ProviderConfig `json:"zhipu"` - VLLM ProviderConfig `json:"vllm"` - Gemini ProviderConfig `json:"gemini"` - Nvidia ProviderConfig `json:"nvidia"` - Moonshot ProviderConfig `json:"moonshot"` - ShengSuanYun ProviderConfig `json:"shengsuanyun"` - DeepSeek ProviderConfig `json:"deepseek"` + Anthropic ProviderConfig `json:"anthropic"` + OpenAI ProviderConfig `json:"openai"` + OpenRouter ProviderConfig `json:"openrouter"` + Groq ProviderConfig `json:"groq"` + Zhipu ProviderConfig `json:"zhipu"` + VLLM ProviderConfig `json:"vllm"` + Gemini ProviderConfig `json:"gemini"` + Nvidia ProviderConfig `json:"nvidia"` + Moonshot ProviderConfig `json:"moonshot"` + ShengSuanYun ProviderConfig `json:"shengsuanyun"` + DeepSeek ProviderConfig `json:"deepseek"` GitHubCopilot ProviderConfig `json:"github_copilot"` } type ProviderConfig struct { - APIKey string `json:"api_key" env:"PICOCLAW_PROVIDERS_{{.Name}}_API_KEY"` - APIBase string `json:"api_base" env:"PICOCLAW_PROVIDERS_{{.Name}}_API_BASE"` - Proxy string `json:"proxy,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_PROXY"` - AuthMethod string `json:"auth_method,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_AUTH_METHOD"` - ConnectMode string `json:"connect_mode,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_CONNECT_MODE"` //only for Github Copilot, `stdio` or `grpc` + APIKey string `json:"api_key" env:"PICOCLAW_PROVIDERS_{{.Name}}_API_KEY"` + APIBase string `json:"api_base" env:"PICOCLAW_PROVIDERS_{{.Name}}_API_BASE"` + Proxy string `json:"proxy,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_PROXY"` + AuthMethod string `json:"auth_method,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_AUTH_METHOD"` + ConnectMode string `json:"connect_mode,omitempty" env:"PICOCLAW_PROVIDERS_{{.Name}}_CONNECT_MODE"` //only for Github Copilot, `stdio` or `grpc` } - - type GatewayConfig struct { Host string `json:"host" env:"PICOCLAW_GATEWAY_HOST"` Port int `json:"port" env:"PICOCLAW_GATEWAY_PORT"` diff --git a/pkg/providers/github_copilot_provider.go b/pkg/providers/github_copilot_provider.go index a6cd20d..39a3f7e 100644 --- a/pkg/providers/github_copilot_provider.go +++ b/pkg/providers/github_copilot_provider.go @@ -7,21 +7,20 @@ import ( json "encoding/json" copilot "github.com/github/copilot-sdk/go" - ) type GitHubCopilotProvider struct { uri string connectMode string // `stdio` or `grpc`` - - session *copilot.Session + + session *copilot.Session } func NewGitHubCopilotProvider(uri string, connectMode string, model string) *GitHubCopilotProvider { var session *copilot.Session - if connectMode == "" { - connectMode = "grpc" + if connectMode == "" { + connectMode = "grpc" } switch connectMode { @@ -37,55 +36,48 @@ func NewGitHubCopilotProvider(uri string, connectMode string, model string) *Git defer client.Stop() session, _ = client.CreateSession(context.Background(), &copilot.SessionConfig{ Model: model, - Hooks: &copilot.SessionHooks{ - - }, + Hooks: &copilot.SessionHooks{}, }) - + } return &GitHubCopilotProvider{ uri: uri, connectMode: connectMode, - - session: session, + + session: session, } } // Chat sends a chat request to GitHub Copilot func (p *GitHubCopilotProvider) Chat(ctx context.Context, messages []Message, tools []ToolDefinition, model string, options map[string]interface{}) (*LLMResponse, error) { - type tempMessage struct { - Role string `json:"role"` - Content string `json:"content"` - } - out := make([]tempMessage, 0, len(messages)) + type tempMessage struct { + Role string `json:"role"` + Content string `json:"content"` + } + out := make([]tempMessage, 0, len(messages)) - for _, msg := range messages { - out = append(out, tempMessage{ - Role: msg.Role, - Content: msg.Content, - }) - } + for _, msg := range messages { + out = append(out, tempMessage{ + Role: msg.Role, + Content: msg.Content, + }) + } - fullcontent,_ := json.Marshal(out) - + fullcontent, _ := json.Marshal(out) + content, _ := p.session.Send(ctx, copilot.MessageOptions{ + Prompt: string(fullcontent), + }) + + return &LLMResponse{ + FinishReason: "stop", + Content: content, + }, nil - - content,_ := p.session.Send(ctx,copilot.MessageOptions{ - Prompt: string(fullcontent), - }) - - - return &LLMResponse{ - FinishReason : "stop", - Content: content, - }, nil - } - func (p *GitHubCopilotProvider) GetDefaultModel() string { - return "gpt-4.1" + return "gpt-4.1" } diff --git a/pkg/providers/http_provider.go b/pkg/providers/http_provider.go index 013f787..1bd440f 100644 --- a/pkg/providers/http_provider.go +++ b/pkg/providers/http_provider.go @@ -317,13 +317,12 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) { case "github_copilot", "copilot": if cfg.Providers.GitHubCopilot.APIBase != "" { apiBase = cfg.Providers.GitHubCopilot.APIBase - }else { - apiBase = "localhost:4321" // no `http://` beacause grpc mode` - } + } else { + apiBase = "localhost:4321" // no `http://` beacause grpc mode` + } return NewGitHubCopilotProvider(apiBase, cfg.Providers.GitHubCopilot.ConnectMode, model), nil - + } - }