Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions cmd/vedcode/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import (
"fmt"
"log"
"os"
"path/filepath"
"strings"
Expand All @@ -13,8 +12,6 @@
)

func main() {
log.SetFlags(0)

if len(os.Args) < 2 {
printUsage()
os.Exit(1)
Expand Down Expand Up @@ -47,12 +44,14 @@
traceLogPath = filepath.Join(".vedcode", "mcp-trace.log")
}

logger, closer, err := trace.NewLogger(traceEnabled, traceLogPath)
console := command == "indexer"
logger, closer, err := trace.NewLogger(traceEnabled, traceLogPath, console)
if err != nil {
log.Fatalf("Error: %v", err)
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
if closer != nil {
defer closer.Close()

Check failure on line 54 in cmd/vedcode/main.go

View workflow job for this annotation

GitHub Actions / lint-and-test

Error return value of `closer.Close` is not checked (errcheck)
}

switch command {
Expand All @@ -67,7 +66,8 @@
}

if err != nil {
log.Fatalf("Error: %v", err)
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
}

Expand Down
39 changes: 34 additions & 5 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,11 @@ type IndexerConfig struct {
}

type ProviderConfig struct {
Provider string `yaml:"provider"`
APIKey string `yaml:"api_key"`
URL string `yaml:"url"`
Model string `yaml:"model"`
Provider string `yaml:"provider"`
APIKey string `yaml:"api_key"`
URL string `yaml:"url"`
Model string `yaml:"model"`
VectorSize int `yaml:"vector_size"`
}

type StorageConfig struct {
Expand Down Expand Up @@ -166,6 +167,9 @@ func merge(home, project *Config) *Config {
if project.Embedding.Model != "" {
cfg.Embedding.Model = project.Embedding.Model
}
if project.Embedding.VectorSize != 0 {
cfg.Embedding.VectorSize = project.Embedding.VectorSize
}
Comment on lines +170 to +172

// Storage: override non-zero fields
if project.Storage.Type != "" {
Expand All @@ -177,7 +181,6 @@ func merge(home, project *Config) *Config {
if project.Storage.CollectionPrefix != "" {
cfg.Storage.CollectionPrefix = project.Storage.CollectionPrefix
}

// Indexer: override non-zero fields
if project.Indexer.MaxFileSize != 0 {
cfg.Indexer.MaxFileSize = project.Indexer.MaxFileSize
Expand Down Expand Up @@ -263,5 +266,31 @@ func validate(cfg *Config) error {
if cfg.Storage.CollectionPrefix == "" {
return fmt.Errorf("config validation: storage.collection_prefix is required")
}
// URL is required only for HTTP-based providers
if requiresURL(cfg.LLM.Provider) && cfg.LLM.URL == "" {
return fmt.Errorf("config validation: llm.url is required for provider %q", cfg.LLM.Provider)
}
if requiresURL(cfg.Embedding.Provider) && cfg.Embedding.URL == "" {
return fmt.Errorf("config validation: embedding.url is required for provider %q", cfg.Embedding.Provider)
}

// API key is required for SDK-based providers
if cfg.LLM.Provider == "gemini" && cfg.LLM.APIKey == "" {
return fmt.Errorf("config validation: llm.api_key is required for gemini provider")
}
if cfg.Embedding.Provider == "gemini" && cfg.Embedding.APIKey == "" {
return fmt.Errorf("config validation: embedding.api_key is required for gemini provider")
}

return nil
}

// requiresURL returns true for HTTP-based providers that need a base URL.
func requiresURL(provider string) bool {
switch provider {
case "generic-http":
return true
default:
return false
}
}
Loading
Loading