MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / awsStreamHandler

Function awsStreamHandler

relay/channel/aws/relay-aws.go:130–196  ·  view source on GitHub ↗
(c *gin.Context, resp *http.Response, info *relaycommon.RelayInfo, requestMode int)

Source from the content-addressed store, hash-verified

128}
129
130func awsStreamHandler(c *gin.Context, resp *http.Response, info *relaycommon.RelayInfo, requestMode int) (*types.NewAPIError, *dto.Usage) {
131 awsCli, err := newAwsClient(c, info)
132 if err != nil {
133 return types.NewError(err, types.ErrorCodeChannelAwsClientError), nil
134 }
135
136 awsModelId := awsModelID(c.GetString("request_model"))
137
138 awsRegionPrefix := awsRegionPrefix(awsCli.Options().Region)
139 canCrossRegion := awsModelCanCrossRegion(awsModelId, awsRegionPrefix)
140 if canCrossRegion {
141 awsModelId = awsModelCrossRegion(awsModelId, awsRegionPrefix)
142 }
143
144 awsReq := &bedrockruntime.InvokeModelWithResponseStreamInput{
145 ModelId: aws.String(awsModelId),
146 Accept: aws.String("application/json"),
147 ContentType: aws.String("application/json"),
148 }
149
150 claudeReq_, ok := c.Get("converted_request")
151 if !ok {
152 return types.NewError(errors.New("aws claude request not found"), types.ErrorCodeInvalidRequest), nil
153 }
154 claudeReq := claudeReq_.(*dto.ClaudeRequest)
155
156 awsClaudeReq := copyRequest(claudeReq)
157 awsReq.Body, err = json.Marshal(awsClaudeReq)
158 if err != nil {
159 return types.NewError(errors.Wrap(err, "marshal request"), types.ErrorCodeBadResponseBody), nil
160 }
161
162 awsResp, err := awsCli.InvokeModelWithResponseStream(c.Request.Context(), awsReq)
163 if err != nil {
164 return types.NewError(errors.Wrap(err, "InvokeModelWithResponseStream"), types.ErrorCodeChannelAwsClientError), nil
165 }
166 stream := awsResp.GetStream()
167 defer stream.Close()
168
169 claudeInfo := &claude.ClaudeResponseInfo{
170 ResponseId: helper.GetResponseID(c),
171 Created: common.GetTimestamp(),
172 Model: info.UpstreamModelName,
173 ResponseText: strings.Builder{},
174 Usage: &dto.Usage{},
175 }
176
177 for event := range stream.Events() {
178 switch v := event.(type) {
179 case *bedrockruntimeTypes.ResponseStreamMemberChunk:
180 info.SetFirstResponseTime()
181 respErr := claude.HandleStreamResponseData(c, info, claudeInfo, string(v.Value.Bytes), RequestModeMessage)
182 if respErr != nil {
183 return respErr, nil
184 }
185 case *bedrockruntimeTypes.UnknownUnionMember:
186 fmt.Println("unknown tag:", v.Tag)
187 return types.NewError(errors.New("unknown response type"), types.ErrorCodeInvalidRequest), nil

Callers 1

DoResponseMethod · 0.85

Calls 11

GetResponseIDFunction · 0.92
HandleStreamResponseDataFunction · 0.92
newAwsClientFunction · 0.85
awsModelIDFunction · 0.85
awsRegionPrefixFunction · 0.85
awsModelCanCrossRegionFunction · 0.85
awsModelCrossRegionFunction · 0.85
GetMethod · 0.80
SetFirstResponseTimeMethod · 0.80
copyRequestFunction · 0.70

Tested by

no test coverage detected