mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-15 15:40:38 +02:00
Add files via upload
This commit is contained in:
@@ -38,6 +38,7 @@ type Params struct {
|
|||||||
ConversationID string
|
ConversationID string
|
||||||
OrchMode string
|
OrchMode string
|
||||||
OrchestratorName string
|
OrchestratorName string
|
||||||
|
RunID string
|
||||||
}
|
}
|
||||||
|
|
||||||
// AttachAgentRunCallbacks returns ctx wrapped with callbacks.InitCallbacks when enabled.
|
// AttachAgentRunCallbacks returns ctx wrapped with callbacks.InitCallbacks when enabled.
|
||||||
@@ -53,7 +54,10 @@ func AttachAgentRunCallbacks(ctx context.Context, cfg *config.MultiAgentEinoCall
|
|||||||
if mode == "off" {
|
if mode == "off" {
|
||||||
return ctx
|
return ctx
|
||||||
}
|
}
|
||||||
runID := uuid.New().String()
|
runID := strings.TrimSpace(p.RunID)
|
||||||
|
if runID == "" {
|
||||||
|
runID = uuid.New().String()
|
||||||
|
}
|
||||||
if p.Progress != nil && cfg.ShouldEmitEinoTraceSSE(mode) {
|
if p.Progress != nil && cfg.ShouldEmitEinoTraceSSE(mode) {
|
||||||
p.Progress("eino_trace_run", "Eino callbacks session", map[string]interface{}{
|
p.Progress("eino_trace_run", "Eino callbacks session", map[string]interface{}{
|
||||||
"runId": runID,
|
"runId": runID,
|
||||||
@@ -206,7 +210,7 @@ func (h *runHandler) onStart(ctx context.Context, info *callbacks.RunInfo, input
|
|||||||
"spanId": spanID,
|
"spanId": spanID,
|
||||||
"parentSpanId": parentID,
|
"parentSpanId": parentID,
|
||||||
"conversationId": strings.TrimSpace(h.params.ConversationID),
|
"conversationId": strings.TrimSpace(h.params.ConversationID),
|
||||||
"orchestration": strings.TrimSpace(h.params.OrchMode),
|
"orchestration": strings.TrimSpace(h.params.OrchMode),
|
||||||
"component": string(ri.Component),
|
"component": string(ri.Component),
|
||||||
"name": ri.Name,
|
"name": ri.Name,
|
||||||
"type": ri.Type,
|
"type": ri.Type,
|
||||||
@@ -255,7 +259,7 @@ func (h *runHandler) onEnd(ctx context.Context, info *callbacks.RunInfo, output
|
|||||||
"runId": h.runID,
|
"runId": h.runID,
|
||||||
"spanId": spanID,
|
"spanId": spanID,
|
||||||
"conversationId": strings.TrimSpace(h.params.ConversationID),
|
"conversationId": strings.TrimSpace(h.params.ConversationID),
|
||||||
"orchestration": strings.TrimSpace(h.params.OrchMode),
|
"orchestration": strings.TrimSpace(h.params.OrchMode),
|
||||||
"component": string(ri.Component),
|
"component": string(ri.Component),
|
||||||
"name": ri.Name,
|
"name": ri.Name,
|
||||||
"type": ri.Type,
|
"type": ri.Type,
|
||||||
@@ -301,7 +305,7 @@ func (h *runHandler) onError(ctx context.Context, info *callbacks.RunInfo, err e
|
|||||||
"runId": h.runID,
|
"runId": h.runID,
|
||||||
"spanId": spanID,
|
"spanId": spanID,
|
||||||
"conversationId": strings.TrimSpace(h.params.ConversationID),
|
"conversationId": strings.TrimSpace(h.params.ConversationID),
|
||||||
"orchestration": strings.TrimSpace(h.params.OrchMode),
|
"orchestration": strings.TrimSpace(h.params.OrchMode),
|
||||||
"component": string(ri.Component),
|
"component": string(ri.Component),
|
||||||
"name": ri.Name,
|
"name": ri.Name,
|
||||||
"type": ri.Type,
|
"type": ri.Type,
|
||||||
|
|||||||
@@ -16,6 +16,29 @@ func TestAttachAgentRunCallbacks_Disabled(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAttachAgentRunCallbacksUsesProvidedRunID(t *testing.T) {
|
||||||
|
emit := true
|
||||||
|
var gotRunID string
|
||||||
|
ctx := context.Background()
|
||||||
|
cfg := &config.MultiAgentEinoCallbacksConfig{Enabled: true, Mode: "sse", SseTraceToClient: &emit}
|
||||||
|
|
||||||
|
AttachAgentRunCallbacks(ctx, cfg, Params{
|
||||||
|
RunID: "run-shared",
|
||||||
|
Progress: func(eventType, _ string, data interface{}) {
|
||||||
|
if eventType != "eino_trace_run" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if m, ok := data.(map[string]interface{}); ok {
|
||||||
|
gotRunID, _ = m["runId"].(string)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
if gotRunID != "run-shared" {
|
||||||
|
t.Fatalf("runId = %q, want run-shared", gotRunID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestTruncateRunes(t *testing.T) {
|
func TestTruncateRunes(t *testing.T) {
|
||||||
if got := truncateRunes("abc", 10); got != "abc" {
|
if got := truncateRunes("abc", 10); got != "abc" {
|
||||||
t.Fatalf("got %q", got)
|
t.Fatalf("got %q", got)
|
||||||
|
|||||||
@@ -205,6 +205,44 @@ func TestReasoningToolChoiceCompatRoundTripperDeepSeek(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReasoningToolChoiceCompatRoundTripperDeepSeekEndpointWinsOverProfile(t *testing.T) {
|
||||||
|
var gotBody string
|
||||||
|
rt := &reasoningToolChoiceCompatRoundTripper{
|
||||||
|
cfg: &config.OpenAIConfig{
|
||||||
|
BaseURL: "https://api.deepseek.com/v1",
|
||||||
|
Model: "deepseek-v4-flash",
|
||||||
|
Reasoning: config.OpenAIReasoningConfig{
|
||||||
|
Profile: "openai_compat",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
base: roundTripperFunc(func(req *http.Request) (*http.Response, error) {
|
||||||
|
b, _ := io.ReadAll(req.Body)
|
||||||
|
gotBody = string(b)
|
||||||
|
return &http.Response{
|
||||||
|
StatusCode: 200,
|
||||||
|
Body: io.NopCloser(strings.NewReader(`{"choices":[{"message":{"content":"ok"}}]}`)),
|
||||||
|
Header: http.Header{"Content-Type": []string{"application/json"}},
|
||||||
|
}, nil
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
req, err := http.NewRequest(http.MethodPost, "https://api.deepseek.com/v1/chat/completions", strings.NewReader(
|
||||||
|
`{"model":"deepseek-v4-flash","tool_choice":"required","tools":[],"messages":[]}`,
|
||||||
|
))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
_, err = rt.RoundTrip(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if strings.Contains(gotBody, "tool_choice") {
|
||||||
|
t.Fatalf("expected DeepSeek tool_choice stripped despite openai_compat profile, got %s", gotBody)
|
||||||
|
}
|
||||||
|
if !strings.Contains(gotBody, "tools") {
|
||||||
|
t.Fatalf("expected tools preserved for DeepSeek, got %s", gotBody)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type roundTripperFunc func(*http.Request) (*http.Response, error)
|
type roundTripperFunc func(*http.Request) (*http.Response, error)
|
||||||
|
|
||||||
func (f roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) {
|
func (f roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||||
|
|||||||
@@ -55,6 +55,9 @@ func isDeepSeekToolChoiceCompatProfile(cfg *config.OpenAIConfig) bool {
|
|||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if cfg.IsDeepSeekEndpointOrModel() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
profile := strings.ToLower(strings.TrimSpace(cfg.Reasoning.ProfileEffective()))
|
profile := strings.ToLower(strings.TrimSpace(cfg.Reasoning.ProfileEffective()))
|
||||||
if profile == "deepseek" || profile == "deepseek_compat" {
|
if profile == "deepseek" || profile == "deepseek_compat" {
|
||||||
return true
|
return true
|
||||||
@@ -62,7 +65,5 @@ func isDeepSeekToolChoiceCompatProfile(cfg *config.OpenAIConfig) bool {
|
|||||||
if profile != "" && profile != "auto" {
|
if profile != "" && profile != "auto" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
baseURL := strings.ToLower(cfg.BaseURL)
|
return false
|
||||||
model := strings.ToLower(cfg.Model)
|
|
||||||
return strings.Contains(baseURL, "deepseek") || strings.Contains(model, "deepseek")
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user