// q38max: Standalone OpenAI-compatible gateway for Qwen 3.8 Max HuggingFace Spaces
// Created by Luxferre in 2026, released into the public domain
package main
import (
"bytes"
"context"
"crypto/rand"
"encoding/json"
"flag"
"fmt"
"io"
"log"
"net/http"
"os"
"regexp"
"strings"
"sync"
"time"
)
var (
DefaultSpaceURL = "https://harpreetsahota-qwen38-max-openlogo-demo.hf.space"
DefaultSamplePath = "/home/user/datasets/openlogo/data/data_0/logos32plus_002359.jpg"
DefaultModelID = "qwen-3.8-max"
DefaultUserAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:153.0) Gecko/20100101 Firefox/153.0"
ConfiguredUserAgent string
ConfiguredToken string
)
// ---------------------------------------------------------------------------
// OpenAI API Data Structures
// ---------------------------------------------------------------------------
type ModelItem struct {
ID string `json:"id"`
Object string `json:"object"`
Created int64 `json:"created"`
OwnedBy string `json:"owned_by"`
}
type ModelsResponse struct {
Object string `json:"object"`
Data []ModelItem `json:"data"`
}
type ToolCallFunction struct {
Name string `json:"name"`
Arguments string `json:"arguments"`
}
type ToolCall struct {
Index *int `json:"index,omitempty"`
ID string `json:"id,omitempty"`
Type string `json:"type,omitempty"`
Function ToolCallFunction `json:"function"`
}
type Tool struct {
Type string `json:"type"`
Function interface{} `json:"function"`
}
type ChatMessage struct {
Role string `json:"role"`
Content interface{} `json:"content"`
ReasoningContent string `json:"reasoning_content,omitempty"`
ToolCalls []ToolCall `json:"tool_calls,omitempty"`
ToolCallID string `json:"tool_call_id,omitempty"`
Name string `json:"name,omitempty"`
}
func (m *ChatMessage) GetContentString() string {
if m.Content == nil {
return ""
}
if str, ok := m.Content.(string); ok {
return str
}
if parts, ok := m.Content.([]interface{}); ok {
var sb strings.Builder
for _, p := range parts {
if str, ok := p.(string); ok {
sb.WriteString(str)
} else if itemMap, ok := p.(map[string]interface{}); ok {
if textVal, ok := itemMap["text"].(string); ok {
sb.WriteString(textVal)
}
}
}
return sb.String()
}
b, err := json.Marshal(m.Content)
if err == nil {
return string(b)
}
return fmt.Sprintf("%v", m.Content)
}
type ChatCompletionRequest struct {
Model string `json:"model"`
Messages []ChatMessage `json:"messages"`
Tools []Tool `json:"tools,omitempty"`
ToolChoice interface{} `json:"tool_choice,omitempty"`
Stream bool `json:"stream"`
MaxTokens int `json:"max_tokens"`
MaxCompletionTokens int `json:"max_completion_tokens"`
Temperature *float64 `json:"temperature,omitempty"`
TopP *float64 `json:"top_p,omitempty"`
ReasoningEffort string `json:"reasoning_effort,omitempty"`
Thinking interface{} `json:"thinking,omitempty"`
}
type ChatCompletionResponseChoice struct {
Index int `json:"index"`
Message ChatMessage `json:"message"`
FinishReason string `json:"finish_reason"`
}
type Usage struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
}
type ChatCompletionResponse struct {
ID string `json:"id"`
Object string `json:"object"`
Created int64 `json:"created"`
Model string `json:"model"`
Choices []ChatCompletionResponseChoice `json:"choices"`
Usage Usage `json:"usage"`
}
type StreamDelta struct {
Role string `json:"role,omitempty"`
Content string `json:"content,omitempty"`
ReasoningContent string `json:"reasoning_content,omitempty"`
ToolCalls []ToolCall `json:"tool_calls,omitempty"`
}
type StreamChoice struct {
Index int `json:"index"`
Delta StreamDelta `json:"delta"`
FinishReason *string `json:"finish_reason,omitempty"`
}
type StreamResponse struct {
ID string `json:"id"`
Object string `json:"object"`
Created int64 `json:"created"`
Model string `json:"model"`
Choices []StreamChoice `json:"choices"`
}
// ---------------------------------------------------------------------------
// Helper Utilities
// ---------------------------------------------------------------------------
func GenerateUUID() string {
var b [16]byte
_, err := rand.Read(b[:])
if err != nil {
return "00000000-0000-4000-8000-000000000000"
}
b[6] = (b[6] & 0x0f) | 0x40
b[8] = (b[8] & 0x3f) | 0x80
return fmt.Sprintf("%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:])
}
func FibonacciDelay(attempt int) time.Duration {
if attempt <= 0 {
return 1 * time.Second
}
a, b := 1, 1
for i := 1; i < attempt; i++ {
a, b = b, a+b
}
return time.Duration(a) * time.Second
}
func DoWithFibonacciRetry(client *http.Client, makeReq func() (*http.Request, error), maxRetries int) (*http.Response, error) {
var lastErr error
for attempt := 1; attempt <= maxRetries; attempt++ {
req, err := makeReq()
if err != nil {
return nil, err
}
resp, err := client.Do(req)
if err == nil && (resp.StatusCode == http.StatusOK || resp.StatusCode == http.StatusCreated || resp.StatusCode == http.StatusNoContent) {
return resp, nil
}
if resp != nil {
respBody, _ := io.ReadAll(resp.Body)
resp.Body.Close()
lastErr = fmt.Errorf("HTTP status %d: %s", resp.StatusCode, string(respBody))
} else {
lastErr = err
}
if attempt < maxRetries {
delay := FibonacciDelay(attempt)
time.Sleep(delay)
}
}
return nil, fmt.Errorf("request failed after %d retries: %v", maxRetries, lastErr)
}
func EnableCORS(w http.ResponseWriter) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization, api-key, X-User-Agent, X-HF-Token")
}
func ResolveMaxTokens(req ChatCompletionRequest) int {
mt := req.MaxTokens
if mt == 0 && req.MaxCompletionTokens > 0 {
mt = req.MaxCompletionTokens
}
if mt <= 0 {
mt = 4000
}
return mt
}
func EffectiveUserAgent(r *http.Request) string {
if r != nil {
if c := r.Header.Get("X-User-Agent"); c != "" {
return c
}
}
if ConfiguredUserAgent != "" {
return ConfiguredUserAgent
}
return DefaultUserAgent
}
func EffectiveToken(r *http.Request) string {
if r != nil {
if hf := r.Header.Get("X-HF-Token"); hf != "" {
return hf
}
if auth := r.Header.Get("Authorization"); auth != "" {
if strings.HasPrefix(strings.ToLower(auth), "bearer ") {
token := strings.TrimSpace(auth[7:])
if token != "" && token != "-" {
return token
}
}
}
}
if ConfiguredToken != "" {
return ConfiguredToken
}
if envTok := os.Getenv("HF_TOKEN"); envTok != "" {
return envTok
}
return ""
}
// ---------------------------------------------------------------------------
// FiftyOne HF Space Session Manager
// ---------------------------------------------------------------------------
type FiftyOneSessionManager struct {
spaceURL string
client *http.Client
mu sync.Mutex
token string
datasetName string
lastSeen time.Time
}
func NewFiftyOneSessionManager(spaceURL string, client *http.Client) *FiftyOneSessionManager {
sm := &FiftyOneSessionManager{
spaceURL: strings.TrimRight(spaceURL, "/"),
client: client,
}
go sm.heartbeatLoop()
return sm
}
func (sm *FiftyOneSessionManager) EnsureSession(ctx context.Context, reqUserAgent string, hfToken string) (string, string, error) {
sm.mu.Lock()
defer sm.mu.Unlock()
if sm.token != "" && sm.datasetName != "" && time.Since(sm.lastSeen) < 20*time.Minute {
sm.lastSeen = time.Now()
return sm.token, sm.datasetName, nil
}
return sm.startNewSessionLocked(ctx, reqUserAgent, hfToken)
}
func (sm *FiftyOneSessionManager) startNewSessionLocked(ctx context.Context, reqUserAgent string, hfToken string) (string, string, error) {
url := sm.spaceURL + "/__session/start"
req, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewReader([]byte("{}")))
if err != nil {
return "", "", err
}
req.Header.Set("Content-Type", "application/json")
if reqUserAgent != "" {
req.Header.Set("User-Agent", reqUserAgent)
} else {
req.Header.Set("User-Agent", DefaultUserAgent)
}
if hfToken != "" {
req.Header.Set("Authorization", "Bearer "+hfToken)
}
resp, err := sm.client.Do(req)
if err != nil {
return "", "", fmt.Errorf("failed to connect to session start: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
bodyBytes, _ := io.ReadAll(resp.Body)
return "", "", fmt.Errorf("session start returned status %d: %s", resp.StatusCode, string(bodyBytes))
}
var startRes struct {
Token string `json:"token"`
URL string `json:"url"`
Error string `json:"error"`
}
if err := json.NewDecoder(resp.Body).Decode(&startRes); err != nil {
return "", "", fmt.Errorf("failed to decode session start json: %w", err)
}
if startRes.Error != "" {
return "", "", fmt.Errorf("session start error: %s", startRes.Error)
}
if startRes.Token == "" {
return "", "", fmt.Errorf("session start returned empty token")
}
parts := strings.Split(strings.TrimRight(startRes.URL, "/"), "/")
datasetName := parts[len(parts)-1]
if datasetName == "" {
datasetName = "openlogo-session-" + startRes.Token
}
sm.token = startRes.Token
sm.datasetName = datasetName
sm.lastSeen = time.Now()
log.Printf("[Session] Allocated new session token=%s dataset=%s", sm.token, sm.datasetName)
return sm.token, sm.datasetName, nil
}
func (sm *FiftyOneSessionManager) Invalidate() {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.token = ""
sm.datasetName = ""
}
func (sm *FiftyOneSessionManager) heartbeatLoop() {
ticker := time.NewTicker(45 * time.Second)
defer ticker.Stop()
for range ticker.C {
sm.mu.Lock()
token := sm.token
dataset := sm.datasetName
sm.mu.Unlock()
if token == "" || dataset == "" {
continue
}
url := fmt.Sprintf("%s/__session/heartbeat?dataset=%s", sm.spaceURL, dataset)
req, err := http.NewRequest("POST", url, nil)
if err == nil {
req.Header.Set("X-FiftyOne-Session", token)
req.Header.Set("User-Agent", DefaultUserAgent)
if ConfiguredToken != "" {
req.Header.Set("Authorization", "Bearer "+ConfiguredToken)
}
resp, err := sm.client.Do(req)
if err == nil {
resp.Body.Close()
if resp.StatusCode == http.StatusUnauthorized {
sm.Invalidate()
}
}
}
}
}
// ---------------------------------------------------------------------------
// Response Framing
// ---------------------------------------------------------------------------
type FinalOutput struct {
Content interface{}
ReasoningContent string
ToolCalls []ToolCall
FinishReason string
PromptTokens int
CompletionTokens int
}
func WriteCompletionResponse(w http.ResponseWriter, completionID string, created int64, model string, out FinalOutput) {
finish := out.FinishReason
if finish == "" {
finish = "stop"
}
totalTokens := out.PromptTokens + out.CompletionTokens
resp := ChatCompletionResponse{
ID: completionID,
Object: "chat.completion",
Created: created,
Model: model,
Choices: []ChatCompletionResponseChoice{
{
Index: 0,
Message: ChatMessage{
Role: "assistant",
Content: out.Content,
ReasoningContent: out.ReasoningContent,
ToolCalls: out.ToolCalls,
},
FinishReason: finish,
},
},
Usage: Usage{
PromptTokens: out.PromptTokens,
CompletionTokens: out.CompletionTokens,
TotalTokens: totalTokens,
},
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(resp)
}
type Streamer struct {
w http.ResponseWriter
flusher http.Flusher
id string
created int64
model string
}
func NewStreamer(w http.ResponseWriter, flusher http.Flusher, id string, created int64, model string) *Streamer {
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
return &Streamer{w: w, flusher: flusher, id: id, created: created, model: model}
}
func (s *Streamer) Role() {
sendStreamDelta(s.w, s.flusher, s.id, s.created, s.model, StreamDelta{Role: "assistant"})
}
func (s *Streamer) Reasoning(text string) {
sendStreamDelta(s.w, s.flusher, s.id, s.created, s.model, StreamDelta{ReasoningContent: text})
}
func (s *Streamer) Content(text string) {
sendStreamDelta(s.w, s.flusher, s.id, s.created, s.model, StreamDelta{Content: text})
}
func (s *Streamer) ToolCallDelta(tc ToolCall) {
sendStreamDelta(s.w, s.flusher, s.id, s.created, s.model, StreamDelta{ToolCalls: []ToolCall{tc}})
}
func (s *Streamer) Finish(reason string) {
sendStreamChunk(s.w, s.flusher, s.id, s.created, s.model, StreamDelta{}, &reason)
}
func (s *Streamer) Done() {
fmt.Fprintf(s.w, "data: [DONE]\n\n")
if s.flusher != nil {
s.flusher.Flush()
}
}
func sendStreamDelta(w http.ResponseWriter, flusher http.Flusher, completionID string, createdTime int64, modelName string, delta StreamDelta) {
sendStreamChunk(w, flusher, completionID, createdTime, modelName, delta, nil)
}
func sendStreamChunk(w http.ResponseWriter, flusher http.Flusher, completionID string, createdTime int64, modelName string, delta StreamDelta, finishReason *string) {
chunk := StreamResponse{
ID: completionID,
Object: "chat.completion.chunk",
Created: createdTime,
Model: modelName,
Choices: []StreamChoice{
{
Index: 0,
Delta: delta,
FinishReason: finishReason,
},
},
}
b, _ := json.Marshal(chunk)
fmt.Fprintf(w, "data: %s\n\n", b)
if flusher != nil {
flusher.Flush()
}
}
// ---------------------------------------------------------------------------
// Tool Calling and Reasoning Extraction
// ---------------------------------------------------------------------------
func cleanJSONBlock(input string) string {
s := strings.TrimSpace(input)
if strings.HasPrefix(s, "```") {
lines := strings.Split(s, "\n")
if len(lines) >= 2 {
if strings.HasPrefix(lines[len(lines)-1], "```") {
lines = lines[1 : len(lines)-1]
} else {
lines = lines[1:]
}
s = strings.TrimSpace(strings.Join(lines, "\n"))
}
}
return s
}
func sanitizeJSONValue(v interface{}) interface{} {
switch val := v.(type) {
case string:
return strings.TrimSpace(val)
case map[string]interface{}:
cleanMap := make(map[string]interface{})
for k, childV := range val {
cleanKey := strings.TrimSpace(k)
cleanMap[cleanKey] = sanitizeJSONValue(childV)
}
return cleanMap
case []interface{}:
cleanSlice := make([]interface{}, len(val))
for i, childV := range val {
cleanSlice[i] = sanitizeJSONValue(childV)
}
return cleanSlice
default:
return v
}
}
func parseSingleToolCall(jsonStr string) (ToolCall, bool) {
cleaned := cleanJSONBlock(jsonStr)
var raw map[string]interface{}
if err := json.Unmarshal([]byte(cleaned), &raw); err == nil {
sanitizedRaw, ok := sanitizeJSONValue(raw).(map[string]interface{})
if !ok {
sanitizedRaw = raw
}
for _, wrapperKey := range []string{"function", "function_call", "tool_call"} {
if fnObj, ok := sanitizedRaw[wrapperKey].(map[string]interface{}); ok {
if nameVal, ok := fnObj["name"].(string); ok && nameVal != "" {
argsStr := "{}"
var argsVal interface{}
if a, hasA := fnObj["arguments"]; hasA {
argsVal = a
} else if p, hasP := fnObj["parameters"]; hasP {
argsVal = p
} else if args, hasArgs := fnObj["args"]; hasArgs {
argsVal = args
}
if argsVal != nil {
if s, isStr := argsVal.(string); isStr {
var innerObj interface{}
if json.Unmarshal([]byte(s), &innerObj) == nil {
b, _ := json.Marshal(sanitizeJSONValue(innerObj))
argsStr = string(b)
} else {
argsStr = strings.TrimSpace(s)
}
} else {
b, _ := json.Marshal(sanitizeJSONValue(argsVal))
argsStr = string(b)
}
}
return ToolCall{
ID: "call_" + GenerateUUID()[:8],
Type: "function",
Function: ToolCallFunction{
Name: nameVal,
Arguments: argsStr,
},
}, true
}
}
}
nameVal := ""
for _, key := range []string{"name", "function", "action", "call"} {
if n, ok := sanitizedRaw[key].(string); ok && n != "" {
nameVal = n
break
}
}
if nameVal != "" {
argsStr := "{}"
var argsVal interface{}
for _, key := range []string{"arguments", "parameters", "args", "input"} {
if a, ok := sanitizedRaw[key]; ok {
argsVal = a
break
}
}
if argsVal != nil {
if s, isStr := argsVal.(string); isStr {
var innerObj interface{}
if json.Unmarshal([]byte(s), &innerObj) == nil {
b, _ := json.Marshal(sanitizeJSONValue(innerObj))
argsStr = string(b)
} else {
argsStr = strings.TrimSpace(s)
}
} else {
b, _ := json.Marshal(sanitizeJSONValue(argsVal))
argsStr = string(b)
}
} else {
argsMap := make(map[string]interface{})
for k, v := range sanitizedRaw {
if k != "name" && k != "function" && k != "type" && k != "action" && k != "call" {
argsMap[k] = v
}
}
if len(argsMap) > 0 {
b, _ := json.Marshal(sanitizeJSONValue(argsMap))
argsStr = string(b)
}
}
return ToolCall{
ID: "call_" + GenerateUUID()[:8],
Type: "function",
Function: ToolCallFunction{
Name: nameVal,
Arguments: argsStr,
},
}, true
}
}
return ToolCall{}, false
}
func parseXMLToolCall(block string) (ToolCall, bool) {
inner := strings.TrimSpace(block)
if strings.HasPrefix(inner, "") {
inner = strings.TrimPrefix(inner, "")
}
if strings.HasSuffix(inner, "") {
inner = strings.TrimSuffix(inner, "")
}
inner = cleanJSONBlock(inner)
if tc, ok := parseSingleToolCall(inner); ok {
return tc, true
}
var fnName string
if strings.Contains(inner, "") && strings.Contains(inner, "") {
nStart := strings.Index(inner, "") + len("")
nEnd := strings.Index(inner, "")
if nStart < nEnd {
fnName = strings.TrimSpace(inner[nStart:nEnd])
}
} else if strings.Contains(inner, "") && strings.Contains(inner, "") {
nStart := strings.Index(inner, "") + len("")
nEnd := strings.Index(inner, "")
if nStart < nEnd {
fnName = strings.TrimSpace(inner[nStart:nEnd])
}
}
var argsStr string
if strings.Contains(inner, "") && strings.Contains(inner, "") {
aStart := strings.Index(inner, "") + len("")
aEnd := strings.Index(inner, "")
if aStart < aEnd {
argsStr = strings.TrimSpace(inner[aStart:aEnd])
}
}
if fnName != "" {
if argsStr == "" {
argsStr = "{}"
}
return ToolCall{
ID: "call_" + GenerateUUID()[:8],
Type: "function",
Function: ToolCallFunction{
Name: fnName,
Arguments: argsStr,
},
}, true
}
return ToolCall{}, false
}
func ExtractToolCallBlocks(content string) (blocks []string, remaining string) {
s := content
remaining = content
for strings.Contains(s, "") {
sIdx := strings.Index(s, "")
rest := s[sIdx+len(""):]
relNextSIdx := strings.Index(rest, "")
var nextSIdx int
if relNextSIdx != -1 {
nextSIdx = sIdx + len("") + relNextSIdx
} else {
nextSIdx = -1
}
relEIdx := strings.Index(rest, "")
var eIdx int
if relEIdx != -1 {
eIdx = sIdx + len("") + relEIdx
} else {
eIdx = -1
}
var blockText string
var blockEndPos int
if eIdx != -1 && (nextSIdx == -1 || eIdx < nextSIdx) {
blockEndPos = eIdx + len("")
blockText = s[sIdx:blockEndPos]
s = s[blockEndPos:]
} else if nextSIdx != -1 {
blockEndPos = nextSIdx
blockText = s[sIdx:blockEndPos]
s = s[blockEndPos:]
} else {
blockText = s[sIdx:]
s = ""
}
blocks = append(blocks, blockText)
}
for strings.Contains(remaining, "") {
st := strings.Index(remaining, "")
rest := remaining[st+len(""):]
relNext := strings.Index(rest, "")
var nextSt int
if relNext != -1 {
nextSt = st + len("") + relNext
} else {
nextSt = -1
}
relEn := strings.Index(rest, "")
var en int
if relEn != -1 {
en = st + len("") + relEn
} else {
en = -1
}
if en != -1 && (nextSt == -1 || en < nextSt) {
remaining = strings.TrimSpace(remaining[:st] + remaining[en+len(""):])
} else if nextSt != -1 {
remaining = strings.TrimSpace(remaining[:st] + remaining[nextSt:])
} else {
remaining = strings.TrimSpace(remaining[:st])
}
}
return blocks, remaining
}
func DetectToolCalls(content string) (calls []ToolCall, remainingText string) {
trimmed := strings.TrimSpace(content)
if trimmed == "" {
return nil, ""
}
if strings.Contains(content, "") {
blocks, rem := ExtractToolCallBlocks(content)
for _, blk := range blocks {
if tc, ok := parseXMLToolCall(blk); ok {
calls = append(calls, tc)
}
}
if len(calls) > 0 {
return calls, rem
}
}
var rawArray []interface{}
cleanedContent := cleanJSONBlock(trimmed)
if strings.HasPrefix(cleanedContent, "[") && strings.HasSuffix(cleanedContent, "]") {
if err := json.Unmarshal([]byte(cleanedContent), &rawArray); err == nil && len(rawArray) > 0 {
allValid := true
var tempCalls []ToolCall
for _, item := range rawArray {
b, _ := json.Marshal(item)
if tc, ok := parseSingleToolCall(string(b)); ok {
tempCalls = append(tempCalls, tc)
} else {
allValid = false
break
}
}
if allValid && len(tempCalls) > 0 {
return tempCalls, ""
}
}
}
if tc, ok := parseSingleToolCall(trimmed); ok {
return []ToolCall{tc}, ""
}
return nil, content
}
// ---------------------------------------------------------------------------
// Stateful Streaming Tool Call Filter
// ---------------------------------------------------------------------------
type StreamToolCallFilter struct {
streamer *Streamer
buffer string
insideToolCall bool
insideJSON bool
hasEmittedTool bool
}
func NewStreamToolCallFilter(streamer *Streamer) *StreamToolCallFilter {
return &StreamToolCallFilter{
streamer: streamer,
}
}
func (f *StreamToolCallFilter) Feed(chunk string) {
f.buffer += chunk
for {
if !f.insideToolCall && !f.insideJSON {
idx := strings.Index(f.buffer, "")
if idx != -1 {
cleanPrefix := f.buffer[:idx]
if cleanPrefix != "" {
f.streamer.Content(cleanPrefix)
}
f.buffer = f.buffer[idx:]
f.insideToolCall = true
continue
}
trimmedBuf := strings.TrimSpace(f.buffer)
if (strings.HasPrefix(trimmedBuf, "{\"name\"") || strings.HasPrefix(trimmedBuf, "{\"function\"")) && strings.HasSuffix(trimmedBuf, "}") {
if tc, ok := parseSingleToolCall(trimmedBuf); ok {
f.hasEmittedTool = true
f.streamer.ToolCallDelta(tc)
f.buffer = ""
return
}
}
const safeLen = 12
if len(f.buffer) > safeLen {
emitLen := len(f.buffer) - safeLen
f.streamer.Content(f.buffer[:emitLen])
f.buffer = f.buffer[emitLen:]
}
return
}
if f.insideToolCall {
eIdx := strings.Index(f.buffer, "")
if eIdx != -1 {
block := f.buffer[:eIdx+len("")]
f.buffer = f.buffer[eIdx+len(""):]
f.insideToolCall = false
if tc, ok := parseXMLToolCall(block); ok {
f.hasEmittedTool = true
f.streamer.ToolCallDelta(tc)
}
continue
}
return
}
return
}
}
func (f *StreamToolCallFilter) Flush() {
if f.buffer == "" {
return
}
if f.insideToolCall {
if tc, ok := parseXMLToolCall(f.buffer); ok {
f.hasEmittedTool = true
f.streamer.ToolCallDelta(tc)
f.buffer = ""
return
}
}
if tc, ok := parseSingleToolCall(f.buffer); ok {
f.hasEmittedTool = true
f.streamer.ToolCallDelta(tc)
f.buffer = ""
return
}
f.streamer.Content(f.buffer)
f.buffer = ""
}
func (f *StreamToolCallFilter) HasEmittedTools() bool {
return f.hasEmittedTool
}
// ---------------------------------------------------------------------------
// Thinking Filter
// ---------------------------------------------------------------------------
var thinkTagRegex = regexp.MustCompile(`(?s)(.*?)(?:|$)`)
func ExtractThinkingContent(text string) (thinking string, cleanText string) {
matches := thinkTagRegex.FindAllStringSubmatch(text, -1)
if len(matches) > 0 {
var thinkParts []string
for _, m := range matches {
if len(m) > 1 {
thinkParts = append(thinkParts, strings.TrimSpace(m[1]))
}
}
thinking = strings.Join(thinkParts, "\n\n")
cleanText = thinkTagRegex.ReplaceAllString(text, "")
cleanText = strings.TrimSpace(cleanText)
return thinking, cleanText
}
return "", text
}
// ---------------------------------------------------------------------------
// Conversation Message Formatting
// ---------------------------------------------------------------------------
func formatToolPrompt(tools []Tool) string {
if len(tools) == 0 {
return ""
}
var sb strings.Builder
sb.WriteString("\n\n[AVAILABLE TOOLS]\n")
sb.WriteString("You have access to the following tools/functions:\n")
for _, t := range tools {
b, err := json.Marshal(t)
if err == nil {
sb.WriteString(string(b))
sb.WriteString("\n")
}
}
sb.WriteString("\nTo invoke a tool, output a single tool call formatted exactly like this:\n")
sb.WriteString("{\"name\": \"function_name\", \"arguments\": {\"param1\": \"val1\"}}\n")
sb.WriteString("Do not add extra explanation when calling a tool.\n\n")
return sb.String()
}
func PrepareConversation(req ChatCompletionRequest) (history []map[string]interface{}, currentQuestion string, thinkingMode string) {
var systemParts []string
// Add default baseline directive to maintain conversational focus
systemParts = append(systemParts, "Respond directly and concisely to the user's instructions and queries. Do not mention background image dimensions or unrelated demo metadata unless specifically asked.")
if len(req.Tools) > 0 {
systemParts = append(systemParts, formatToolPrompt(req.Tools))
}
// Determine thinking mode
thinkingMode = "auto"
if req.Thinking != nil {
switch tv := req.Thinking.(type) {
case bool:
if tv {
thinkingMode = "true"
} else {
thinkingMode = "false"
}
case string:
s := strings.ToLower(strings.TrimSpace(tv))
if s == "true" || s == "on" || s == "enabled" {
thinkingMode = "true"
} else if s == "false" || s == "off" || s == "disabled" {
thinkingMode = "false"
}
}
} else if req.ReasoningEffort != "" {
re := strings.ToLower(strings.TrimSpace(req.ReasoningEffort))
if re == "none" || re == "false" || re == "off" {
thinkingMode = "false"
} else if re == "low" || re == "medium" || re == "high" || re == "true" {
thinkingMode = "true"
}
}
var turns []map[string]string
for _, m := range req.Messages {
role := strings.ToLower(strings.TrimSpace(m.Role))
content := m.GetContentString()
if role == "system" {
if content != "" {
systemParts = append(systemParts, content)
}
continue
}
if role == "tool" || role == "function" {
toolName := m.Name
if toolName == "" {
toolName = "tool"
}
content = fmt.Sprintf("{\"name\": %q, \"content\": %s}", toolName, content)
role = "user"
}
if len(m.ToolCalls) > 0 {
var tcParts []string
for _, tc := range m.ToolCalls {
tcParts = append(tcParts, fmt.Sprintf("{\"name\": %q, \"arguments\": %s}", tc.Function.Name, tc.Function.Arguments))
}
if content != "" {
content = content + "\n" + strings.Join(tcParts, "\n")
} else {
content = strings.Join(tcParts, "\n")
}
}
turns = append(turns, map[string]string{
"role": role,
"content": content,
})
}
systemText := strings.TrimSpace(strings.Join(systemParts, "\n\n"))
if len(turns) == 0 {
emptyHist := make([]map[string]interface{}, 0)
if systemText != "" {
return emptyHist, systemText, thinkingMode
}
return emptyHist, "Hello", thinkingMode
}
lastTurn := turns[len(turns)-1]
priorTurns := turns[:len(turns)-1]
historyItems := make([]map[string]interface{}, 0)
for idx, t := range priorTurns {
c := t["content"]
if idx == 0 && systemText != "" {
c = "[SYSTEM INSTRUCTION]\n" + systemText + "\n\n" + c
}
historyItems = append(historyItems, map[string]interface{}{
"role": t["role"],
"content": c,
})
}
currentQuestion = lastTurn["content"]
if len(priorTurns) == 0 && systemText != "" {
currentQuestion = "[SYSTEM INSTRUCTION]\n" + systemText + "\n\n" + currentQuestion
}
return historyItems, currentQuestion, thinkingMode
}
// ---------------------------------------------------------------------------
// Main Gateway Service
// ---------------------------------------------------------------------------
type Q38Gateway struct {
spaceURL string
samplePath string
modelID string
client *http.Client
sessionMgr *FiftyOneSessionManager
}
func NewQ38Gateway(spaceURL string, samplePath string, modelID string, timeout time.Duration) *Q38Gateway {
tr := &http.Transport{
MaxIdleConns: 100,
MaxIdleConnsPerHost: 20,
IdleConnTimeout: 90 * time.Second,
}
client := &http.Client{
Transport: tr,
Timeout: timeout,
}
return &Q38Gateway{
spaceURL: strings.TrimRight(spaceURL, "/"),
samplePath: samplePath,
modelID: modelID,
client: client,
sessionMgr: NewFiftyOneSessionManager(spaceURL, client),
}
}
func (gw *Q38Gateway) HandleModels(w http.ResponseWriter, r *http.Request) {
EnableCORS(w)
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusNoContent)
return
}
now := time.Now().Unix()
resp := ModelsResponse{
Object: "list",
Data: []ModelItem{
{
ID: gw.modelID,
Object: "model",
Created: now,
OwnedBy: "qwen",
},
{
ID: "qwen3.8-max",
Object: "model",
Created: now,
OwnedBy: "qwen",
},
{
ID: "qwen38-max",
Object: "model",
Created: now,
OwnedBy: "qwen",
},
{
ID: "Qwen/Qwen3.8-Max",
Object: "model",
Created: now,
OwnedBy: "qwen",
},
},
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(resp)
}
func (gw *Q38Gateway) HandleChatCompletions(w http.ResponseWriter, r *http.Request) {
EnableCORS(w)
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusNoContent)
return
}
if r.Method != http.MethodPost {
http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
return
}
var req ChatCompletionRequest
bodyBytes, err := io.ReadAll(r.Body)
if err != nil {
http.Error(w, "Failed to read request body", http.StatusBadRequest)
return
}
if err := json.Unmarshal(bodyBytes, &req); err != nil {
http.Error(w, fmt.Sprintf("Invalid JSON request: %v", err), http.StatusBadRequest)
return
}
modelName := req.Model
if modelName == "" {
modelName = gw.modelID
}
maxTokens := ResolveMaxTokens(req)
history, question, thinkingMode := PrepareConversation(req)
if history == nil {
history = make([]map[string]interface{}, 0)
}
reqUA := EffectiveUserAgent(r)
reqHF := EffectiveToken(r)
// Obtain or refresh FiftyOne Session
token, datasetName, err := gw.sessionMgr.EnsureSession(r.Context(), reqUA, reqHF)
if err != nil {
log.Printf("[Error] Failed to obtain FiftyOne session: %v", err)
http.Error(w, fmt.Sprintf("Upstream session error: %v", err), http.StatusBadGateway)
return
}
// Execute ask operator
askPayload := map[string]interface{}{
"operator_uri": "@harpreetsahota/qwen38-max/qwen38_chat",
"dataset_name": datasetName,
"view": []interface{}{},
"selected": []interface{}{},
"selected_samples": []interface{}{},
"selected_labels": []interface{}{},
"filters": map[string]interface{}{},
"extended": map[string]interface{}{},
"params": map[string]interface{}{
"panel_id": "qwen38_chat",
"__method__": "ask",
"filepath": gw.samplePath,
"question": question,
"history": history,
"thinking": thinkingMode,
"hint_format": "auto",
"hint_text": "",
"image_max_side": 1280,
"max_tokens": maxTokens,
},
}
askBody, _ := json.Marshal(askPayload)
executeURL := gw.spaceURL + "/operators/execute"
makeAskReq := func() (*http.Request, error) {
hReq, err := http.NewRequestWithContext(r.Context(), "POST", executeURL, bytes.NewReader(askBody))
if err != nil {
return nil, err
}
hReq.Header.Set("Content-Type", "application/json")
hReq.Header.Set("X-FiftyOne-Session", token)
hReq.Header.Set("User-Agent", reqUA)
if reqHF != "" {
hReq.Header.Set("Authorization", "Bearer "+reqHF)
}
return hReq, nil
}
askResp, err := DoWithFibonacciRetry(gw.client, makeAskReq, 3)
if err != nil {
log.Printf("[Error] ask execution failed: %v", err)
gw.sessionMgr.Invalidate()
http.Error(w, fmt.Sprintf("Upstream operator execution failed: %v", err), http.StatusBadGateway)
return
}
defer askResp.Body.Close()
var askResult struct {
Result struct {
Status string `json:"status"`
RunID string `json:"run_id"`
Error string `json:"error"`
} `json:"result"`
Error string `json:"error"`
ErrorMessage string `json:"error_message"`
}
if err := json.NewDecoder(askResp.Body).Decode(&askResult); err != nil {
http.Error(w, fmt.Sprintf("Failed to parse operator response: %v", err), http.StatusBadGateway)
return
}
if askResult.Error != "" || askResult.ErrorMessage != "" {
errMsg := askResult.Error
if errMsg == "" {
errMsg = askResult.ErrorMessage
}
http.Error(w, fmt.Sprintf("Upstream error: %s", errMsg), http.StatusBadGateway)
return
}
runID := askResult.Result.RunID
if runID == "" {
http.Error(w, "Upstream did not return a run_id", http.StatusBadGateway)
return
}
log.Printf("[Inference] Started run_id=%s model=%s stream=%t thinking=%s", runID, modelName, req.Stream, thinkingMode)
completionID := "chatcmpl-" + GenerateUUID()
createdTime := time.Now().Unix()
if req.Stream {
flusher, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported", http.StatusInternalServerError)
return
}
streamer := NewStreamer(w, flusher, completionID, createdTime, modelName)
streamer.Role()
toolFilter := NewStreamToolCallFilter(streamer)
streamCursor := 0
thinkingCursor := 0
pollTicker := time.NewTicker(150 * time.Millisecond)
defer pollTicker.Stop()
for {
select {
case <-r.Context().Done():
log.Printf("[Stream] Client disconnected for run_id=%s", runID)
return
case <-pollTicker.C:
// 1. Poll thinking chunk
thinkPayload, _ := json.Marshal(map[string]interface{}{
"operator_uri": "@harpreetsahota/qwen38-max/qwen38_chat",
"dataset_name": datasetName,
"view": []interface{}{},
"selected": []interface{}{},
"selected_samples": []interface{}{},
"selected_labels": []interface{}{},
"filters": map[string]interface{}{},
"extended": map[string]interface{}{},
"params": map[string]interface{}{
"panel_id": "qwen38_chat",
"__method__": "get_thinking_chunk",
"run_id": runID,
"cursor": thinkingCursor,
},
})
tReq, err := http.NewRequestWithContext(r.Context(), "POST", executeURL, bytes.NewReader(thinkPayload))
if err == nil {
tReq.Header.Set("Content-Type", "application/json")
tReq.Header.Set("X-FiftyOne-Session", token)
tReq.Header.Set("User-Agent", reqUA)
if reqHF != "" {
tReq.Header.Set("Authorization", "Bearer "+reqHF)
}
tResp, tErr := gw.client.Do(tReq)
if tErr == nil {
var tResult struct {
Result struct {
Text string `json:"text"`
Cursor int `json:"cursor"`
Done bool `json:"done"`
} `json:"result"`
}
if json.NewDecoder(tResp.Body).Decode(&tResult) == nil {
if tResult.Result.Text != "" {
streamer.Reasoning(tResult.Result.Text)
thinkingCursor = tResult.Result.Cursor
}
}
tResp.Body.Close()
}
}
// 2. Poll stream chunk
streamPayload, _ := json.Marshal(map[string]interface{}{
"operator_uri": "@harpreetsahota/qwen38-max/qwen38_chat",
"dataset_name": datasetName,
"view": []interface{}{},
"selected": []interface{}{},
"selected_samples": []interface{}{},
"selected_labels": []interface{}{},
"filters": map[string]interface{}{},
"extended": map[string]interface{}{},
"params": map[string]interface{}{
"panel_id": "qwen38_chat",
"__method__": "get_stream_chunk",
"run_id": runID,
"cursor": streamCursor,
},
})
sReq, err := http.NewRequestWithContext(r.Context(), "POST", executeURL, bytes.NewReader(streamPayload))
if err == nil {
sReq.Header.Set("Content-Type", "application/json")
sReq.Header.Set("X-FiftyOne-Session", token)
sReq.Header.Set("User-Agent", reqUA)
if reqHF != "" {
sReq.Header.Set("Authorization", "Bearer "+reqHF)
}
sResp, sErr := gw.client.Do(sReq)
if sErr == nil {
var sResult struct {
Result struct {
Text string `json:"text"`
Cursor int `json:"cursor"`
Done bool `json:"done"`
FinalStatus struct {
Status string `json:"status"`
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
Error string `json:"error"`
} `json:"final_status"`
} `json:"result"`
}
if json.NewDecoder(sResp.Body).Decode(&sResult) == nil {
if sResult.Result.Text != "" {
toolFilter.Feed(sResult.Result.Text)
streamCursor = sResult.Result.Cursor
}
if sResult.Result.Done {
sResp.Body.Close()
toolFilter.Flush()
finishReason := "stop"
if toolFilter.HasEmittedTools() {
finishReason = "tool_calls"
}
streamer.Finish(finishReason)
streamer.Done()
log.Printf("[Stream] Completed run_id=%s finish_reason=%s", runID, finishReason)
return
}
}
sResp.Body.Close()
}
}
}
}
} else {
// Non-streaming mode: poll until done
var accumulatedContent strings.Builder
var accumulatedThinking strings.Builder
promptTokens := 0
completionTokens := 0
streamCursor := 0
thinkingCursor := 0
pollTicker := time.NewTicker(200 * time.Millisecond)
defer pollTicker.Stop()
for {
select {
case <-r.Context().Done():
log.Printf("[Non-Stream] Client canceled run_id=%s", runID)
return
case <-pollTicker.C:
// Poll thinking chunk
thinkPayload, _ := json.Marshal(map[string]interface{}{
"operator_uri": "@harpreetsahota/qwen38-max/qwen38_chat",
"dataset_name": datasetName,
"view": []interface{}{},
"selected": []interface{}{},
"selected_samples": []interface{}{},
"selected_labels": []interface{}{},
"filters": map[string]interface{}{},
"extended": map[string]interface{}{},
"params": map[string]interface{}{
"panel_id": "qwen38_chat",
"__method__": "get_thinking_chunk",
"run_id": runID,
"cursor": thinkingCursor,
},
})
tReq, err := http.NewRequestWithContext(r.Context(), "POST", executeURL, bytes.NewReader(thinkPayload))
if err == nil {
tReq.Header.Set("Content-Type", "application/json")
tReq.Header.Set("X-FiftyOne-Session", token)
tReq.Header.Set("User-Agent", reqUA)
if reqHF != "" {
tReq.Header.Set("Authorization", "Bearer "+reqHF)
}
tResp, tErr := gw.client.Do(tReq)
if tErr == nil {
var tResult struct {
Result struct {
Text string `json:"text"`
Cursor int `json:"cursor"`
Done bool `json:"done"`
} `json:"result"`
}
if json.NewDecoder(tResp.Body).Decode(&tResult) == nil {
if tResult.Result.Text != "" {
accumulatedThinking.WriteString(tResult.Result.Text)
thinkingCursor = tResult.Result.Cursor
}
}
tResp.Body.Close()
}
}
// Poll stream chunk
streamPayload, _ := json.Marshal(map[string]interface{}{
"operator_uri": "@harpreetsahota/qwen38-max/qwen38_chat",
"dataset_name": datasetName,
"view": []interface{}{},
"selected": []interface{}{},
"selected_samples": []interface{}{},
"selected_labels": []interface{}{},
"filters": map[string]interface{}{},
"extended": map[string]interface{}{},
"params": map[string]interface{}{
"panel_id": "qwen38_chat",
"__method__": "get_stream_chunk",
"run_id": runID,
"cursor": streamCursor,
},
})
sReq, err := http.NewRequestWithContext(r.Context(), "POST", executeURL, bytes.NewReader(streamPayload))
if err == nil {
sReq.Header.Set("Content-Type", "application/json")
sReq.Header.Set("X-FiftyOne-Session", token)
sReq.Header.Set("User-Agent", reqUA)
if reqHF != "" {
sReq.Header.Set("Authorization", "Bearer "+reqHF)
}
sResp, sErr := gw.client.Do(sReq)
if sErr == nil {
var sResult struct {
Result struct {
Text string `json:"text"`
Cursor int `json:"cursor"`
Done bool `json:"done"`
FinalStatus struct {
Status string `json:"status"`
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
Error string `json:"error"`
} `json:"final_status"`
} `json:"result"`
}
if json.NewDecoder(sResp.Body).Decode(&sResult) == nil {
if sResult.Result.Text != "" {
accumulatedContent.WriteString(sResult.Result.Text)
streamCursor = sResult.Result.Cursor
}
if sResult.Result.Done {
sResp.Body.Close()
promptTokens = sResult.Result.FinalStatus.PromptTokens
completionTokens = sResult.Result.FinalStatus.CompletionTokens
fullContent := accumulatedContent.String()
rawThinking := accumulatedThinking.String()
// Check for embedded tags in content
embeddedThink, cleanedContent := ExtractThinkingContent(fullContent)
if embeddedThink != "" {
if rawThinking != "" {
rawThinking = rawThinking + "\n\n" + embeddedThink
} else {
rawThinking = embeddedThink
}
fullContent = cleanedContent
}
toolCalls, remainingText := DetectToolCalls(fullContent)
finishReason := "stop"
var finalMsgContent interface{} = strings.TrimSpace(remainingText)
if len(toolCalls) > 0 {
finishReason = "tool_calls"
if strings.TrimSpace(remainingText) == "" {
finalMsgContent = nil
}
}
out := FinalOutput{
Content: finalMsgContent,
ReasoningContent: strings.TrimSpace(rawThinking),
ToolCalls: toolCalls,
FinishReason: finishReason,
PromptTokens: promptTokens,
CompletionTokens: completionTokens,
}
WriteCompletionResponse(w, completionID, createdTime, modelName, out)
log.Printf("[Non-Stream] Completed run_id=%s finish_reason=%s tokens=%d/%d", runID, finishReason, promptTokens, completionTokens)
return
}
}
sResp.Body.Close()
}
}
}
}
}
}
// ---------------------------------------------------------------------------
// Gateway Entrypoint
// ---------------------------------------------------------------------------
func main() {
port := flag.Int("port", 8080, "Port to listen on")
spaceURL := flag.String("space-url", DefaultSpaceURL, "Upstream Hugging Face space URL")
samplePath := flag.String("sample-path", DefaultSamplePath, "Target image sample filepath inside the container")
modelID := flag.String("model", DefaultModelID, "Default model identifier")
timeoutSec := flag.Int("timeout", 300, "Request timeout in seconds")
userAge := flag.String("user-agent", "", "Custom User-Agent header")
uaShort := flag.String("ua", "", "Custom User-Agent header (short)")
hfToken := flag.String("hf-token", "", "Optional Hugging Face access token")
flag.Parse()
if *userAge != "" {
ConfiguredUserAgent = *userAge
} else if *uaShort != "" {
ConfiguredUserAgent = *uaShort
}
if *hfToken != "" {
ConfiguredToken = *hfToken
}
gw := NewQ38Gateway(*spaceURL, *samplePath, *modelID, time.Duration(*timeoutSec)*time.Second)
mux := http.NewServeMux()
// OpenAI routes
mux.HandleFunc("/v1/models", gw.HandleModels)
mux.HandleFunc("/models", gw.HandleModels)
mux.HandleFunc("/v1/chat/completions", gw.HandleChatCompletions)
mux.HandleFunc("/chat/completions", gw.HandleChatCompletions)
// Health and index routes
mux.HandleFunc("/__health", func(w http.ResponseWriter, r *http.Request) {
EnableCORS(w)
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"status":"ok","gateway":"q38max"}`))
})
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
EnableCORS(w)
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"status":"ok","gateway":"q38max"}`))
})
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
EnableCORS(w)
if r.URL.Path == "/" {
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"service":"q38max","description":"OpenAI-compatible gateway for Qwen 3.8 Max","models_endpoint":"/v1/models","completions_endpoint":"/v1/chat/completions"}`))
return
}
http.NotFound(w, r)
})
addr := fmt.Sprintf(":%d", *port)
log.Printf("[q38max] Listening on http://localhost%s (Upstream: %s)", addr, *spaceURL)
log.Printf("[q38max] OpenAI compatible endpoints: http://localhost%s/v1/chat/completions", addr)
if err := http.ListenAndServe(addr, mux); err != nil {
log.Fatalf("[q38max] Server failed: %v", err)
}
}