mirror of
https://github.com/coalaura/whiskr.git
synced 2025-09-08 17:06:42 +00:00
some fixes
This commit is contained in:
54
chat.go
54
chat.go
@@ -42,13 +42,26 @@ type Request struct {
|
|||||||
Messages []Message `json:"messages"`
|
Messages []Message `json:"messages"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *ToolCall) AsToolCall() openrouter.ToolCall {
|
func (t *ToolCall) AsAssistantToolCall(content string) openrouter.ChatCompletionMessage {
|
||||||
return openrouter.ToolCall{
|
// Some models require there to be content
|
||||||
ID: t.ID,
|
if content == "" {
|
||||||
Type: openrouter.ToolTypeFunction,
|
content = " "
|
||||||
Function: openrouter.FunctionCall{
|
}
|
||||||
Name: t.Name,
|
|
||||||
Arguments: t.Args,
|
return openrouter.ChatCompletionMessage{
|
||||||
|
Role: openrouter.ChatMessageRoleAssistant,
|
||||||
|
Content: openrouter.Content{
|
||||||
|
Text: content,
|
||||||
|
},
|
||||||
|
ToolCalls: []openrouter.ToolCall{
|
||||||
|
{
|
||||||
|
ID: t.ID,
|
||||||
|
Type: openrouter.ToolTypeFunction,
|
||||||
|
Function: openrouter.FunctionCall{
|
||||||
|
Name: t.Name,
|
||||||
|
Arguments: t.Args,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,13 +113,6 @@ func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if model.Tools && r.Search && ExaToken != "" {
|
|
||||||
request.Tools = GetSearchTools()
|
|
||||||
request.ToolChoice = "auto"
|
|
||||||
|
|
||||||
request.Messages = append(request.Messages, openrouter.SystemMessage("You have access to web search tools. Use `search_web` with `query` (string) and `num_results` (1-10) to find current information and get result summaries. Use `fetch_contents` with `urls` (array) to read full page content. Always specify all parameters for each tool call. Call only one tool per response."))
|
|
||||||
}
|
|
||||||
|
|
||||||
prompt, err := BuildPrompt(r.Prompt, model)
|
prompt, err := BuildPrompt(r.Prompt, model)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -116,6 +122,13 @@ func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) {
|
|||||||
request.Messages = append(request.Messages, openrouter.SystemMessage(prompt))
|
request.Messages = append(request.Messages, openrouter.SystemMessage(prompt))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if model.Tools && r.Search && ExaToken != "" {
|
||||||
|
request.Tools = GetSearchTools()
|
||||||
|
request.ToolChoice = "auto"
|
||||||
|
|
||||||
|
request.Messages = append(request.Messages, openrouter.SystemMessage("You have access to web search tools. Use `search_web` with `query` (string) and `num_results` (1-10) to find current information and get result summaries. Use `fetch_contents` with `urls` (array) to read full page content. Always specify all parameters for each tool call. Call only one tool per response."))
|
||||||
|
}
|
||||||
|
|
||||||
for index, message := range r.Messages {
|
for index, message := range r.Messages {
|
||||||
switch message.Role {
|
switch message.Role {
|
||||||
case "system":
|
case "system":
|
||||||
@@ -148,7 +161,7 @@ func (r *Request) Parse() (*openrouter.ChatCompletionRequest, error) {
|
|||||||
|
|
||||||
tool := message.Tool
|
tool := message.Tool
|
||||||
if tool != nil {
|
if tool != nil {
|
||||||
msg.ToolCalls = []openrouter.ToolCall{tool.AsToolCall()}
|
msg = tool.AsAssistantToolCall(message.Text)
|
||||||
|
|
||||||
request.Messages = append(request.Messages, msg)
|
request.Messages = append(request.Messages, msg)
|
||||||
|
|
||||||
@@ -188,7 +201,6 @@ func HandleChat(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
request.Stream = true
|
request.Stream = true
|
||||||
|
|
||||||
dump("debug.json", request)
|
|
||||||
debug("preparing stream")
|
debug("preparing stream")
|
||||||
|
|
||||||
response, err := NewStream(w)
|
response, err := NewStream(w)
|
||||||
@@ -216,6 +228,8 @@ func HandleChat(w http.ResponseWriter, r *http.Request) {
|
|||||||
request.Messages = append(request.Messages, openrouter.SystemMessage("You have reached the maximum number of tool calls for this conversation. Provide your final response based on the information you have gathered."))
|
request.Messages = append(request.Messages, openrouter.SystemMessage("You have reached the maximum number of tool calls for this conversation. Provide your final response based on the information you have gathered."))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dump("debug.json", request)
|
||||||
|
|
||||||
tool, message, err := RunCompletion(ctx, response, request)
|
tool, message, err := RunCompletion(ctx, response, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.Send(ErrorChunk(err))
|
response.Send(ErrorChunk(err))
|
||||||
@@ -259,13 +273,7 @@ func HandleChat(w http.ResponseWriter, r *http.Request) {
|
|||||||
response.Send(ToolChunk(tool))
|
response.Send(ToolChunk(tool))
|
||||||
|
|
||||||
request.Messages = append(request.Messages,
|
request.Messages = append(request.Messages,
|
||||||
openrouter.ChatCompletionMessage{
|
tool.AsAssistantToolCall(message),
|
||||||
Role: openrouter.ChatMessageRoleAssistant,
|
|
||||||
Content: openrouter.Content{
|
|
||||||
Text: message,
|
|
||||||
},
|
|
||||||
ToolCalls: []openrouter.ToolCall{tool.AsToolCall()},
|
|
||||||
},
|
|
||||||
tool.AsToolMessage(),
|
tool.AsToolMessage(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -59,7 +59,6 @@ func GetSearchTools() []openrouter.Tool {
|
|||||||
"type": "array",
|
"type": "array",
|
||||||
"description": "List of URLs (1..N) to fetch.",
|
"description": "List of URLs (1..N) to fetch.",
|
||||||
"items": map[string]any{"type": "string"},
|
"items": map[string]any{"type": "string"},
|
||||||
"minItems": 1,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
|
@@ -244,7 +244,7 @@ body.loading #version {
|
|||||||
|
|
||||||
.message textarea.text {
|
.message textarea.text {
|
||||||
background: #181926;
|
background: #181926;
|
||||||
min-width: 100%;
|
min-width: 480px;
|
||||||
min-height: 100px;
|
min-height: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user