From fc963f86c94f8d96224414e409fda757f3b2d11d Mon Sep 17 00:00:00 2001 From: Grail Finder Date: Mon, 24 Nov 2025 19:08:34 +0300 Subject: Feat: parse func call from or --- llm.go | 13 +++++++++++++ models/openrouter.go | 14 ++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/llm.go b/llm.go index 55051bd..47a1d46 100644 --- a/llm.go +++ b/llm.go @@ -468,6 +468,19 @@ func (or OpenRouterChat) ParseChunk(data []byte) (*models.TextChunk, error) { resp := &models.TextChunk{ Chunk: llmchunk.Choices[len(llmchunk.Choices)-1].Delta.Content, } + + // Handle tool calls similar to OpenAIer + if len(llmchunk.Choices[len(llmchunk.Choices)-1].Delta.ToolCalls) > 0 { + resp.ToolChunk = llmchunk.Choices[len(llmchunk.Choices)-1].Delta.ToolCalls[0].Function.Arguments + fname := llmchunk.Choices[len(llmchunk.Choices)-1].Delta.ToolCalls[0].Function.Name + if fname != "" { + resp.FuncName = fname + } + } + if resp.ToolChunk != "" { + resp.ToolResp = true + } + if llmchunk.Choices[len(llmchunk.Choices)-1].FinishReason == "stop" { if resp.Chunk != "" { logger.Error("text inside of finish llmchunk", "chunk", llmchunk) diff --git a/models/openrouter.go b/models/openrouter.go index ac37a85..50f26b6 100644 --- a/models/openrouter.go +++ b/models/openrouter.go @@ -57,10 +57,11 @@ type OpenRouterChatRespNonStream struct { NativeFinishReason string `json:"native_finish_reason"` Index int `json:"index"` Message struct { - Role string `json:"role"` - Content string `json:"content"` - Refusal any `json:"refusal"` - Reasoning any `json:"reasoning"` + Role string `json:"role"` + Content string `json:"content"` + Refusal any `json:"refusal"` + Reasoning any `json:"reasoning"` + ToolCalls []ToolDeltaResp `json:"tool_calls"` } `json:"message"` } `json:"choices"` Usage struct { @@ -79,8 +80,9 @@ type OpenRouterChatResp struct { Choices []struct { Index int `json:"index"` Delta struct { - Role string `json:"role"` - Content string `json:"content"` + Role string `json:"role"` + Content string `json:"content"` + ToolCalls []ToolDeltaResp `json:"tool_calls"` } `json:"delta"` FinishReason string `json:"finish_reason"` NativeFinishReason string `json:"native_finish_reason"` -- cgit v1.2.3