95 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Go
		
	
	
	
/*
 | 
						|
 * Copyright 2025 coze-dev Authors
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
package chatmodel
 | 
						|
 | 
						|
import (
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/cloudwego/eino-ext/components/model/deepseek"
 | 
						|
	"github.com/cloudwego/eino-ext/libs/acl/openai"
 | 
						|
	"google.golang.org/genai"
 | 
						|
)
 | 
						|
 | 
						|
type Config struct {
 | 
						|
	BaseURL string        `json:"base_url,omitempty" yaml:"base_url"`
 | 
						|
	APIKey  string        `json:"api_key,omitempty" yaml:"api_key"`
 | 
						|
	Timeout time.Duration `json:"timeout,omitempty" yaml:"timeout"`
 | 
						|
 | 
						|
	Model            string   `json:"model" yaml:"model"`
 | 
						|
	Temperature      *float32 `json:"temperature,omitempty" yaml:"temperature,omitempty"`
 | 
						|
	FrequencyPenalty *float32 `json:"frequency_penalty,omitempty" yaml:"frequency_penalty,omitempty"`
 | 
						|
	PresencePenalty  *float32 `json:"presence_penalty,omitempty" yaml:"presence_penalty,omitempty"`
 | 
						|
	MaxTokens        *int     `json:"max_tokens,omitempty" yaml:"max_tokens,omitempty"`
 | 
						|
	TopP             *float32 `json:"top_p,omitempty" yaml:"top_p"`
 | 
						|
	TopK             *int     `json:"top_k,omitempty" yaml:"top_k"`
 | 
						|
	Stop             []string `json:"stop,omitempty" yaml:"stop"`
 | 
						|
	EnableThinking   *bool    `json:"enable_thinking,omitempty" yaml:"enable_thinking,omitempty"`
 | 
						|
 | 
						|
	OpenAI   *OpenAIConfig   `json:"open_ai,omitempty" yaml:"openai"`
 | 
						|
	Claude   *ClaudeConfig   `json:"claude,omitempty" yaml:"claude"`
 | 
						|
	Ark      *ArkConfig      `json:"ark,omitempty" yaml:"ark"`
 | 
						|
	Deepseek *DeepseekConfig `json:"deepseek,omitempty" yaml:"deepseek"`
 | 
						|
	Qwen     *QwenConfig     `json:"qwen,omitempty" yaml:"qwen"`
 | 
						|
	Gemini   *GeminiConfig   `json:"gemini,omitempty" yaml:"gemini"`
 | 
						|
 | 
						|
	Custom map[string]string `json:"custom,omitempty" yaml:"custom"`
 | 
						|
}
 | 
						|
 | 
						|
type OpenAIConfig struct {
 | 
						|
	ByAzure    bool   `json:"by_azure,omitempty" yaml:"by_azure"`
 | 
						|
	APIVersion string `json:"api_version,omitempty" yaml:"api_version"`
 | 
						|
 | 
						|
	ResponseFormat *openai.ChatCompletionResponseFormat `json:"response_format,omitempty" yaml:"response_format"`
 | 
						|
}
 | 
						|
 | 
						|
type ClaudeConfig struct {
 | 
						|
	ByBedrock bool `json:"by_bedrock" yaml:"by_bedrock"`
 | 
						|
	// bedrock config
 | 
						|
	AccessKey       string `json:"access_key,omitempty" yaml:"access_key"`
 | 
						|
	SecretAccessKey string `json:"secret_access_key,omitempty" yaml:"secret_access_key"`
 | 
						|
	SessionToken    string `json:"session_token,omitempty" yaml:"session_token"`
 | 
						|
	Region          string `json:"region,omitempty" yaml:"region"`
 | 
						|
}
 | 
						|
 | 
						|
type ArkConfig struct {
 | 
						|
	Region       string            `json:"region" yaml:"region"`
 | 
						|
	AccessKey    string            `json:"access_key,omitempty" yaml:"access_key"`
 | 
						|
	SecretKey    string            `json:"secret_key,omitempty" yaml:"secret_key"`
 | 
						|
	RetryTimes   *int              `json:"retry_times,omitempty" yaml:"retry_times"`
 | 
						|
	CustomHeader map[string]string `json:"custom_header,omitempty" yaml:"custom_header"`
 | 
						|
}
 | 
						|
 | 
						|
type DeepseekConfig struct {
 | 
						|
	ResponseFormatType deepseek.ResponseFormatType `json:"response_format_type" yaml:"response_format_type"`
 | 
						|
}
 | 
						|
 | 
						|
type QwenConfig struct {
 | 
						|
	ResponseFormat *openai.ChatCompletionResponseFormat `json:"response_format,omitempty" yaml:"response_format"`
 | 
						|
}
 | 
						|
 | 
						|
type GeminiConfig struct {
 | 
						|
	Backend    genai.Backend       `json:"backend,omitempty" yaml:"backend"`
 | 
						|
	Project    string              `json:"project,omitempty" yaml:"project"`
 | 
						|
	Location   string              `json:"location,omitempty" yaml:"location"`
 | 
						|
	APIVersion string              `json:"api_version,omitempty" yaml:"api_version"`
 | 
						|
	Headers    map[string][]string `json:"headers,omitempty" yaml:"headers"`
 | 
						|
	TimeoutMs  int64               `json:"timeout_ms,omitempty" yaml:"timeout_ms"`
 | 
						|
 | 
						|
	IncludeThoughts *bool  `json:"include_thoughts,omitempty" yaml:"include_thoughts"` // default true
 | 
						|
	ThinkingBudget  *int32 `json:"thinking_budget,omitempty" yaml:"thinking_budget"`   // default nil
 | 
						|
}
 |