mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 00:45:29 +08:00
refactor: introduce a public app package to expose the internal/server router, resolving internal package import restrictions.
This commit is contained in:
@@ -232,17 +232,18 @@ func (h *Handler) writeClaudeStream(w http.ResponseWriter, r *http.Request, mode
|
||||
w.Header().Set("Content-Type", "text/event-stream")
|
||||
w.Header().Set("Cache-Control", "no-cache")
|
||||
w.Header().Set("Connection", "keep-alive")
|
||||
flusher, ok := w.(http.Flusher)
|
||||
if !ok {
|
||||
writeJSON(w, http.StatusInternalServerError, map[string]any{"error": map[string]any{"type": "api_error", "message": "streaming unsupported"}})
|
||||
return
|
||||
flusher, hasFlusher := w.(http.Flusher)
|
||||
if !hasFlusher {
|
||||
config.Logger.Warn("[claude_stream] response writer does not support flush; falling back to buffered SSE")
|
||||
}
|
||||
send := func(v any) {
|
||||
b, _ := json.Marshal(v)
|
||||
_, _ = w.Write([]byte("data: "))
|
||||
_, _ = w.Write(b)
|
||||
_, _ = w.Write([]byte("\n\n"))
|
||||
flusher.Flush()
|
||||
if hasFlusher {
|
||||
flusher.Flush()
|
||||
}
|
||||
}
|
||||
messageID := fmt.Sprintf("msg_%d", time.Now().UnixNano())
|
||||
inputTokens := util.EstimateTokens(fmt.Sprintf("%v", messages))
|
||||
|
||||
@@ -193,10 +193,9 @@ func (h *Handler) handleStream(w http.ResponseWriter, r *http.Request, resp *htt
|
||||
w.Header().Set("Content-Type", "text/event-stream")
|
||||
w.Header().Set("Cache-Control", "no-cache")
|
||||
w.Header().Set("Connection", "keep-alive")
|
||||
flusher, ok := w.(http.Flusher)
|
||||
if !ok {
|
||||
writeOpenAIError(w, http.StatusInternalServerError, "streaming unsupported")
|
||||
return
|
||||
flusher, hasFlusher := w.(http.Flusher)
|
||||
if !hasFlusher {
|
||||
config.Logger.Warn("[stream] response writer does not support flush; falling back to buffered SSE")
|
||||
}
|
||||
|
||||
lines := make(chan []byte, 128)
|
||||
@@ -233,11 +232,15 @@ func (h *Handler) handleStream(w http.ResponseWriter, r *http.Request, resp *htt
|
||||
_, _ = w.Write([]byte("data: "))
|
||||
_, _ = w.Write(b)
|
||||
_, _ = w.Write([]byte("\n\n"))
|
||||
flusher.Flush()
|
||||
if hasFlusher {
|
||||
flusher.Flush()
|
||||
}
|
||||
}
|
||||
sendDone := func() {
|
||||
_, _ = w.Write([]byte("data: [DONE]\n\n"))
|
||||
flusher.Flush()
|
||||
if hasFlusher {
|
||||
flusher.Flush()
|
||||
}
|
||||
}
|
||||
|
||||
finalize := func(finishReason string) {
|
||||
@@ -313,8 +316,10 @@ func (h *Handler) handleStream(w http.ResponseWriter, r *http.Request, resp *htt
|
||||
finalize("stop")
|
||||
return
|
||||
}
|
||||
_, _ = w.Write([]byte(": keep-alive\n\n"))
|
||||
flusher.Flush()
|
||||
if hasFlusher {
|
||||
_, _ = w.Write([]byte(": keep-alive\n\n"))
|
||||
flusher.Flush()
|
||||
}
|
||||
case line, ok := <-lines:
|
||||
if !ok {
|
||||
// Ensure scanner completion is observed only after all queued
|
||||
|
||||
Reference in New Issue
Block a user