 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package openai
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"errors"
 | |
| 	"net/http"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	ErrTooManyEmptyStreamMessages = errors.New("stream has sent too many empty messages")
 | |
| )
 | |
| 
 | |
| type CompletionStream struct {
 | |
| 	*streamReader[CompletionResponse]
 | |
| }
 | |
| 
 | |
| // CreateCompletionStream — API call to create a completion w/ streaming
 | |
| // support. It sets whether to stream back partial progress. If set, tokens will be
 | |
| // sent as data-only server-sent events as they become available, with the
 | |
| // stream terminated by a data: [DONE] message.
 | |
| func (c *Client) CreateCompletionStream(
 | |
| 	ctx context.Context,
 | |
| 	request CompletionRequest,
 | |
| ) (stream *CompletionStream, err error) {
 | |
| 	urlSuffix := "/completions"
 | |
| 	if !checkEndpointSupportsModel(urlSuffix, request.Model) {
 | |
| 		err = ErrCompletionUnsupportedModel
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if !checkPromptType(request.Prompt) {
 | |
| 		err = ErrCompletionRequestPromptTypeNotSupported
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	request.Stream = true
 | |
| 	req, err := c.newRequest(
 | |
| 		ctx,
 | |
| 		http.MethodPost,
 | |
| 		c.fullURL(urlSuffix, withModel(request.Model)),
 | |
| 		withBody(request),
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	resp, err := sendRequestStream[CompletionResponse](c, req)
 | |
| 	if err != nil {
 | |
| 		return
 | |
| 	}
 | |
| 	stream = &CompletionStream{
 | |
| 		streamReader: resp,
 | |
| 	}
 | |
| 	return
 | |
| }
 |