@@ -92,17 +92,27 @@ export const getModels: AppRouteHandler<GetModelsRoute> = (c) => {
9292export const generateText : AppRouteHandler < GenerateTextRoute > = async ( c ) => {
9393 const payload = await c . req . json ( ) ;
9494
95- console . log ( "LLM HASH" , await cache . hashKey ( JSON . stringify ( payload ) ) ) ;
96- console . log ( "LLM PAYLOAD" , JSON . stringify ( payload , null , 2 ) ) ;
97-
98- // Check cache for existing response
95+ // First, check whether the request is cached, if so return the cached result
9996 const cacheKey = await cache . hashKey ( JSON . stringify ( payload ) ) ;
10097 const cachedResult = await cache . loadItem ( cacheKey ) ;
10198 if ( cachedResult ) {
10299 const lastMessage = cachedResult . messages [ cachedResult . messages . length - 1 ] ;
103100 return c . json ( lastMessage ) ;
104101 }
105102
103+ const persistCache = async (
104+ messages : { role : string ; content : string } [ ] ,
105+ ) => {
106+ try {
107+ await cache . saveItem ( cacheKey , {
108+ ...payload ,
109+ messages,
110+ } ) ;
111+ } catch ( e ) {
112+ console . error ( "Error saving response to cache:" , e ) ;
113+ }
114+ } ;
115+
106116 const validationError = validateModelAndJsonMode (
107117 c ,
108118 payload . model ,
@@ -120,29 +130,17 @@ export const generateText: AppRouteHandler<GenerateTextRoute> = async (c) => {
120130 ...payload ,
121131 abortSignal : c . req . raw . signal ,
122132 max_tokens : payload . max_tokens || modelDefaultMaxTokens ,
133+ // If response is streaming, save to cache after the stream is complete
123134 onStreamComplete : payload . stream
124- ? ( finalMessage ) => {
125- // Save the completed stream response to the cache
126- cache . saveItem ( cacheKey , {
127- ...payload ,
128- messages : [ ...payload . messages , finalMessage ] ,
129- } ) . catch ( ( e ) => {
130- console . error ( "Error saving streamed response to cache:" , e ) ;
131- } ) ;
135+ ? async ( result ) => {
136+ await persistCache ( result . messages ) ;
132137 }
133138 : undefined ,
134139 } ) ;
135140
141+ // If response is not streaming, save to cache and return the message
136142 if ( ! payload . stream ) {
137- // Save to cache
138- console . log ( "messagesssssss" , [ ...payload . messages , result . message ] ) ;
139- console . log ( "=======================" ) ;
140- console . log ( "minus one" , [ ...payload . messages ] ) ;
141- await cache . saveItem ( cacheKey , {
142- ...payload ,
143- // FIXME(jake): I believe this is persisting duplicate messages to the cached json blobs.
144- messages : [ ...payload . messages , result . message ] ,
145- } ) ;
143+ await persistCache ( result . messages ) ;
146144 return c . json ( result . message ) ;
147145 }
148146
0 commit comments