Add conversation management

This commit is contained in:
2026-02-28 22:10:55 +00:00
parent 4439567ccd
commit ae4c7ab489
8 changed files with 311 additions and 41 deletions

View File

@@ -53,7 +53,7 @@ func (p *Provider) Generate(ctx context.Context, req *api.ResponseRequest) (*api
for _, msg := range req.Input {
var content string
for _, block := range msg.Content {
if block.Type == "input_text" {
if block.Type == "input_text" || block.Type == "output_text" {
content += block.Text
}
}
@@ -147,22 +147,22 @@ func (p *Provider) GenerateStream(ctx context.Context, req *api.ResponseRequest)
for _, msg := range req.Input {
var content string
for _, block := range msg.Content {
if block.Type == "input_text" {
if block.Type == "input_text" || block.Type == "output_text" {
content += block.Text
}
}
switch msg.Role {
case "user":
}
switch msg.Role {
case "user":
messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(content)))
case "assistant":
case "assistant":
messages = append(messages, anthropic.NewAssistantMessage(anthropic.NewTextBlock(content)))
case "system":
case "system":
system = content
}
}
}
}
// Build params
// Build params
params := anthropic.MessageNewParams{
Model: anthropic.Model(model),
Messages: messages,

View File

@@ -54,11 +54,21 @@ func (p *Provider) Generate(ctx context.Context, req *api.ResponseRequest) (*api
// Convert Open Responses messages to Gemini format
var contents []*genai.Content
var systemText string
for _, msg := range req.Input {
if msg.Role == "system" {
for _, block := range msg.Content {
if block.Type == "input_text" || block.Type == "output_text" {
systemText += block.Text
}
}
continue
}
var parts []*genai.Part
for _, block := range msg.Content {
if block.Type == "input_text" {
if block.Type == "input_text" || block.Type == "output_text" {
parts = append(parts, genai.NewPartFromText(block.Text))
}
}
@@ -74,8 +84,18 @@ func (p *Provider) Generate(ctx context.Context, req *api.ResponseRequest) (*api
})
}
// Build config with system instruction if present
var config *genai.GenerateContentConfig
if systemText != "" {
config = &genai.GenerateContentConfig{
SystemInstruction: &genai.Content{
Parts: []*genai.Part{genai.NewPartFromText(systemText)},
},
}
}
// Generate content
resp, err := p.client.Models.GenerateContent(ctx, model, contents, nil)
resp, err := p.client.Models.GenerateContent(ctx, model, contents, config)
if err != nil {
return nil, fmt.Errorf("google api error: %w", err)
}
@@ -143,11 +163,21 @@ func (p *Provider) GenerateStream(ctx context.Context, req *api.ResponseRequest)
// Convert messages
var contents []*genai.Content
var systemText string
for _, msg := range req.Input {
if msg.Role == "system" {
for _, block := range msg.Content {
if block.Type == "input_text" || block.Type == "output_text" {
systemText += block.Text
}
}
continue
}
var parts []*genai.Part
for _, block := range msg.Content {
if block.Type == "input_text" {
if block.Type == "input_text" || block.Type == "output_text" {
parts = append(parts, genai.NewPartFromText(block.Text))
}
}
@@ -163,8 +193,18 @@ func (p *Provider) GenerateStream(ctx context.Context, req *api.ResponseRequest)
})
}
// Build config with system instruction if present
var config *genai.GenerateContentConfig
if systemText != "" {
config = &genai.GenerateContentConfig{
SystemInstruction: &genai.Content{
Parts: []*genai.Part{genai.NewPartFromText(systemText)},
},
}
}
// Create stream
stream := p.client.Models.GenerateContentStream(ctx, model, contents, nil)
stream := p.client.Models.GenerateContentStream(ctx, model, contents, config)
// Process stream
for resp, err := range stream {

View File

@@ -52,7 +52,7 @@ func (p *Provider) Generate(ctx context.Context, req *api.ResponseRequest) (*api
for _, msg := range req.Input {
var content string
for _, block := range msg.Content {
if block.Type == "input_text" {
if block.Type == "input_text" || block.Type == "output_text" {
content += block.Text
}
}
@@ -127,22 +127,22 @@ func (p *Provider) GenerateStream(ctx context.Context, req *api.ResponseRequest)
for _, msg := range req.Input {
var content string
for _, block := range msg.Content {
if block.Type == "input_text" {
if block.Type == "input_text" || block.Type == "output_text" {
content += block.Text
}
}
switch msg.Role {
case "user":
}
switch msg.Role {
case "user":
messages = append(messages, openai.UserMessage(content))
case "assistant":
case "assistant":
messages = append(messages, openai.AssistantMessage(content))
case "system":
case "system":
messages = append(messages, openai.SystemMessage(content))
}
}
}
}
// Create streaming request
// Create streaming request
stream := p.client.Chat.Completions.NewStreaming(ctx, openai.ChatCompletionNewParams{
Model: openai.ChatModel(model),
Messages: messages,