package ollama import ( "time" ) // Config represents the configuration for the Ollama SDK type Config struct { // BaseURL is the base URL of the Ollama API server BaseURL string `env:"OLLAMA_BASE_URL" default:"http://localhost:11434"` // Timeout is the timeout for HTTP requests Timeout time.Duration `env:"OLLAMA_TIMEOUT" default:"300s"` // RetryAttempts is the number of retry attempts for failed requests RetryAttempts int `env:"OLLAMA_RETRY_ATTEMPTS" default:"3"` // RetryDelay is the delay between retry attempts RetryDelay time.Duration `env:"OLLAMA_RETRY_DELAY" default:"2s"` // EnableLogging enables request/response logging EnableLogging bool `env:"OLLAMA_ENABLE_LOGGING" default:"true"` // UserAgent is the user agent string for HTTP requests UserAgent string `env:"OLLAMA_USER_AGENT" default:"TenderManagement-OllamaSDK/1.0"` // DefaultModel is the default model to use if none is specified DefaultModel string `env:"OLLAMA_DEFAULT_MODEL" default:"llama2"` // DefaultTemperature is the default temperature for text generation DefaultTemperature float64 `env:"OLLAMA_DEFAULT_TEMPERATURE" default:"0.7"` // DefaultTopP is the default top_p value for text generation DefaultTopP float64 `env:"OLLAMA_DEFAULT_TOP_P" default:"0.9"` // DefaultMaxTokens is the default maximum number of tokens to generate DefaultMaxTokens int `env:"OLLAMA_DEFAULT_MAX_TOKENS" default:"1000"` // EnableStreaming enables streaming responses by default EnableStreaming bool `env:"OLLAMA_ENABLE_STREAMING" default:"false"` } // DefaultConfig returns a default configuration for the Ollama SDK func DefaultConfig() *Config { return &Config{ BaseURL: "http://localhost:11434", Timeout: 300 * time.Second, RetryAttempts: 3, RetryDelay: 2 * time.Second, EnableLogging: true, UserAgent: "TenderManagement-OllamaSDK/1.0", DefaultModel: "llama2", DefaultTemperature: 0.7, DefaultTopP: 0.9, DefaultMaxTokens: 1000, EnableStreaming: false, } } // Validate validates the configuration func (c *Config) Validate() error { if c.BaseURL == "" { return ErrInvalidConfig("BaseURL cannot be empty") } if c.Timeout <= 0 { return ErrInvalidConfig("Timeout must be positive") } if c.RetryAttempts < 0 { return ErrInvalidConfig("RetryAttempts cannot be negative") } if c.RetryDelay < 0 { return ErrInvalidConfig("RetryDelay cannot be negative") } if c.DefaultTemperature < 0 || c.DefaultTemperature > 2 { return ErrInvalidConfig("DefaultTemperature must be between 0 and 2") } if c.DefaultTopP < 0 || c.DefaultTopP > 1 { return ErrInvalidConfig("DefaultTopP must be between 0 and 1") } if c.DefaultMaxTokens < 0 { return ErrInvalidConfig("DefaultMaxTokens cannot be negative") } return nil }