feat(config): add log_conversations option to AI metadata configuration
This commit is contained in:
@@ -44,6 +44,7 @@ ai:
|
||||
model: "gpt-4o-mini"
|
||||
fallback_model: ""
|
||||
temperature: 0.1
|
||||
log_conversations: false
|
||||
litellm:
|
||||
base_url: "http://localhost:4000/v1"
|
||||
api_key: "replace-me"
|
||||
|
||||
@@ -43,6 +43,7 @@ ai:
|
||||
metadata:
|
||||
model: "gpt-4o-mini"
|
||||
temperature: 0.1
|
||||
log_conversations: false
|
||||
litellm:
|
||||
base_url: "http://localhost:4000/v1"
|
||||
api_key: "replace-me"
|
||||
|
||||
@@ -44,6 +44,7 @@ type Client struct {
|
||||
httpClient *http.Client
|
||||
log *slog.Logger
|
||||
dimensions int
|
||||
logConversations bool
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
@@ -58,6 +59,7 @@ type Config struct {
|
||||
HTTPClient *http.Client
|
||||
Log *slog.Logger
|
||||
Dimensions int
|
||||
LogConversations bool
|
||||
}
|
||||
|
||||
type embeddingsRequest struct {
|
||||
@@ -113,6 +115,7 @@ func New(cfg Config) *Client {
|
||||
httpClient: cfg.HTTPClient,
|
||||
log: cfg.Log,
|
||||
dimensions: cfg.Dimensions,
|
||||
logConversations: cfg.LogConversations,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,6 +180,15 @@ func (c *Client) extractMetadataWithModel(ctx context.Context, input, model stri
|
||||
},
|
||||
}
|
||||
|
||||
if c.logConversations && c.log != nil {
|
||||
c.log.Info("metadata conversation request",
|
||||
slog.String("provider", c.name),
|
||||
slog.String("model", model),
|
||||
slog.String("system", metadataSystemPrompt),
|
||||
slog.String("input", input),
|
||||
)
|
||||
}
|
||||
|
||||
var resp chatCompletionsResponse
|
||||
if err := c.doJSON(ctx, "/chat/completions", req, &resp); err != nil {
|
||||
return thoughttypes.ThoughtMetadata{}, err
|
||||
@@ -188,7 +200,17 @@ func (c *Client) extractMetadataWithModel(ctx context.Context, input, model stri
|
||||
return thoughttypes.ThoughtMetadata{}, fmt.Errorf("%s metadata: no choices returned", c.name)
|
||||
}
|
||||
|
||||
metadataText := strings.TrimSpace(resp.Choices[0].Message.Content)
|
||||
rawResponse := resp.Choices[0].Message.Content
|
||||
|
||||
if c.logConversations && c.log != nil {
|
||||
c.log.Info("metadata conversation response",
|
||||
slog.String("provider", c.name),
|
||||
slog.String("model", model),
|
||||
slog.String("response", rawResponse),
|
||||
)
|
||||
}
|
||||
|
||||
metadataText := strings.TrimSpace(rawResponse)
|
||||
metadataText = stripThinkingBlocks(metadataText)
|
||||
metadataText = stripCodeFence(metadataText)
|
||||
metadataText = extractJSONObject(metadataText)
|
||||
|
||||
@@ -25,5 +25,6 @@ func New(cfg config.AIConfig, httpClient *http.Client, log *slog.Logger) (*compa
|
||||
HTTPClient: httpClient,
|
||||
Log: log,
|
||||
Dimensions: cfg.Embeddings.Dimensions,
|
||||
LogConversations: cfg.Metadata.LogConversations,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -21,5 +21,6 @@ func New(cfg config.AIConfig, httpClient *http.Client, log *slog.Logger) (*compa
|
||||
HTTPClient: httpClient,
|
||||
Log: log,
|
||||
Dimensions: cfg.Embeddings.Dimensions,
|
||||
LogConversations: cfg.Metadata.LogConversations,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -32,5 +32,6 @@ func New(cfg config.AIConfig, httpClient *http.Client, log *slog.Logger) (*compa
|
||||
HTTPClient: httpClient,
|
||||
Log: log,
|
||||
Dimensions: cfg.Embeddings.Dimensions,
|
||||
LogConversations: cfg.Metadata.LogConversations,
|
||||
}), nil
|
||||
}
|
||||
|
||||
@@ -87,6 +87,7 @@ type AIMetadataConfig struct {
|
||||
Model string `yaml:"model"`
|
||||
FallbackModel string `yaml:"fallback_model"`
|
||||
Temperature float64 `yaml:"temperature"`
|
||||
LogConversations bool `yaml:"log_conversations"`
|
||||
}
|
||||
|
||||
type LiteLLMConfig struct {
|
||||
|
||||
Reference in New Issue
Block a user