@@ -35,6 +35,12 @@ import type { NextRequest } from 'next/server'
3535
3636import type { ChatCompletionRequestBody } from '@/llm-api/types'
3737
38+ import {
39+ AvianError ,
40+ handleAvianNonStream ,
41+ handleAvianStream ,
42+ isAvianModel ,
43+ } from '@/llm-api/avian'
3844import {
3945 CanopyWaveError ,
4046 handleCanopyWaveNonStream ,
@@ -469,11 +475,12 @@ export async function postChatCompletions(params: {
469475 // Handle streaming vs non-streaming
470476 try {
471477 if ( bodyStream ) {
472- // Streaming request — route to SiliconFlow/CanopyWave/Fireworks for supported models
478+ // Streaming request — route to provider for supported models
473479 const useSiliconFlow = false // isSiliconFlowModel(typedBody.model)
474480 const useCanopyWave = false // isCanopyWaveModel(typedBody.model)
475- const useFireworks = isFireworksModel ( typedBody . model )
476- const useOpenAIDirect = ! useFireworks && isOpenAIDirectModel ( typedBody . model )
481+ const useAvian = isAvianModel ( typedBody . model )
482+ const useFireworks = ! useAvian && isFireworksModel ( typedBody . model )
483+ const useOpenAIDirect = ! useAvian && ! useFireworks && isOpenAIDirectModel ( typedBody . model )
477484 const stream = useSiliconFlow
478485 ? await handleSiliconFlowStream ( {
479486 body : typedBody ,
@@ -494,6 +501,16 @@ export async function postChatCompletions(params: {
494501 logger,
495502 insertMessageBigquery,
496503 } )
504+ : useAvian
505+ ? await handleAvianStream ( {
506+ body : typedBody ,
507+ userId,
508+ stripeCustomerId,
509+ agentId,
510+ fetch,
511+ logger,
512+ insertMessageBigquery,
513+ } )
497514 : useFireworks
498515 ? await handleFireworksStream ( {
499516 body : typedBody ,
@@ -544,13 +561,14 @@ export async function postChatCompletions(params: {
544561 } ,
545562 } )
546563 } else {
547- // Non-streaming request — route to SiliconFlow/CanopyWave/Fireworks for supported models
564+ // Non-streaming request — route to provider for supported models
548565 // TEMPORARILY DISABLED: route through OpenRouter
549566 const model = typedBody . model
550567 const useSiliconFlow = false // isSiliconFlowModel(model)
551568 const useCanopyWave = false // isCanopyWaveModel(model)
552- const useFireworks = isFireworksModel ( model )
553- const shouldUseOpenAIEndpoint = ! useFireworks && isOpenAIDirectModel ( model )
569+ const useAvianNonStream = isAvianModel ( model )
570+ const useFireworks = ! useAvianNonStream && isFireworksModel ( model )
571+ const shouldUseOpenAIEndpoint = ! useAvianNonStream && ! useFireworks && isOpenAIDirectModel ( model )
554572
555573 const nonStreamRequest = useSiliconFlow
556574 ? handleSiliconFlowNonStream ( {
@@ -572,6 +590,16 @@ export async function postChatCompletions(params: {
572590 logger,
573591 insertMessageBigquery,
574592 } )
593+ : useAvianNonStream
594+ ? handleAvianNonStream ( {
595+ body : typedBody ,
596+ userId,
597+ stripeCustomerId,
598+ agentId,
599+ fetch,
600+ logger,
601+ insertMessageBigquery,
602+ } )
575603 : useFireworks
576604 ? handleFireworksNonStream ( {
577605 body : typedBody ,
@@ -622,6 +650,10 @@ export async function postChatCompletions(params: {
622650 if ( error instanceof OpenRouterError ) {
623651 openrouterError = error
624652 }
653+ let avianError : AvianError | undefined
654+ if ( error instanceof AvianError ) {
655+ avianError = error
656+ }
625657 let fireworksError : FireworksError | undefined
626658 if ( error instanceof FireworksError ) {
627659 fireworksError = error
@@ -641,7 +673,7 @@ export async function postChatCompletions(params: {
641673
642674 // Log detailed error information for debugging
643675 const errorDetails = openrouterError ?. toJSON ( )
644- const providerLabel = siliconflowError ? 'SiliconFlow' : canopywaveError ? 'CanopyWave' : fireworksError ? 'Fireworks' : openaiError ? 'OpenAI' : 'OpenRouter'
676+ const providerLabel = avianError ? 'Avian' : siliconflowError ? 'SiliconFlow' : canopywaveError ? 'CanopyWave' : fireworksError ? 'Fireworks' : openaiError ? 'OpenAI' : 'OpenRouter'
645677 logger . error (
646678 {
647679 error : getErrorObject ( error ) ,
@@ -655,8 +687,8 @@ export async function postChatCompletions(params: {
655687 ? typedBody . messages . length
656688 : 0 ,
657689 messages : typedBody . messages ,
658- providerStatusCode : ( openrouterError ?? fireworksError ?? canopywaveError ?? siliconflowError ?? openaiError ) ?. statusCode ,
659- providerStatusText : ( openrouterError ?? fireworksError ?? canopywaveError ?? siliconflowError ?? openaiError ) ?. statusText ,
690+ providerStatusCode : ( openrouterError ?? avianError ?? fireworksError ?? canopywaveError ?? siliconflowError ?? openaiError ) ?. statusCode ,
691+ providerStatusText : ( openrouterError ?? avianError ?? fireworksError ?? canopywaveError ?? siliconflowError ?? openaiError ) ?. statusText ,
660692 openrouterErrorCode : errorDetails ?. error ?. code ,
661693 openrouterErrorType : errorDetails ?. error ?. type ,
662694 openrouterErrorMessage : errorDetails ?. error ?. message ,
@@ -681,6 +713,9 @@ export async function postChatCompletions(params: {
681713 if ( error instanceof OpenRouterError ) {
682714 return NextResponse . json ( error . toJSON ( ) , { status : error . statusCode } )
683715 }
716+ if ( error instanceof AvianError ) {
717+ return NextResponse . json ( error . toJSON ( ) , { status : error . statusCode } )
718+ }
684719 if ( error instanceof FireworksError ) {
685720 return NextResponse . json ( error . toJSON ( ) , { status : error . statusCode } )
686721 }
0 commit comments