wuyiqunLu commited on
Commit
9ead915
1 Parent(s): 93889c8

fix: some file with empty space not get encoded correctly (#110)

Browse files

Use the previous not worked image to load the chat and see success
result:
<img width="1061" alt="image"
src="https://github.com/landing-ai/vision-agent-ui/assets/132986242/646e8bcc-c3de-412e-aa79-24dbee5bc02f">
Also, the 400 error logged completely:
<img width="1390" alt="image"
src="https://github.com/landing-ai/vision-agent-ui/assets/132986242/19fe3eb5-51ad-40d7-b64a-a2ceae3afb69">

app/api/vision-agent/route.ts CHANGED
@@ -119,7 +119,11 @@ export const POST = withLogging(
119
 
120
  const formData = new FormData();
121
  formData.append('input', apiMessages);
122
- formData.append('image', encodeURI(mediaUrl));
 
 
 
 
123
 
124
  const fetchResponse = await fetch(
125
  `${process.env.AGENT_HOST}/v1/agent/chat?agent_class=vision_agent&self_reflection=false`,
@@ -138,16 +142,30 @@ export const POST = withLogging(
138
 
139
  if (!fetchResponse.ok && fetchResponse.body) {
140
  const reader = fetchResponse.body.getReader();
 
141
  return new StreamingTextResponse(
142
  new ReadableStream({
143
  async start(controller) {
144
  try {
145
- const { done, value } = await reader?.read();
146
- if (!done) {
147
- const errorText = new TextDecoder().decode(value);
148
- logger.error(session, { message: errorText }, request);
149
- controller.error(new Error(`Response error: ${errorText}`));
 
150
  }
 
 
 
 
 
 
 
 
 
 
 
 
151
  } catch (e) {
152
  logger.error(session, (e as Error).message, request);
153
  }
 
119
 
120
  const formData = new FormData();
121
  formData.append('input', apiMessages);
122
+ const [prefix, fileName] = mediaUrl.split(`${chatId}/`);
123
+ formData.append(
124
+ 'image',
125
+ prefix + `${chatId}/` + encodeURIComponent(decodeURIComponent(fileName)),
126
+ );
127
 
128
  const fetchResponse = await fetch(
129
  `${process.env.AGENT_HOST}/v1/agent/chat?agent_class=vision_agent&self_reflection=false`,
 
142
 
143
  if (!fetchResponse.ok && fetchResponse.body) {
144
  const reader = fetchResponse.body.getReader();
145
+ let errorText = '';
146
  return new StreamingTextResponse(
147
  new ReadableStream({
148
  async start(controller) {
149
  try {
150
+ while (true) {
151
+ const { done, value } = await reader?.read();
152
+ if (done) {
153
+ break;
154
+ }
155
+ errorText += new TextDecoder().decode(value);
156
  }
157
+ logger.error(
158
+ session,
159
+ {
160
+ message: errorText,
161
+ messageId,
162
+ chatId,
163
+ statusText: fetchResponse.statusText,
164
+ status: fetchResponse.status,
165
+ },
166
+ request,
167
+ );
168
+ controller.error(new Error(`Response error: ${errorText}`));
169
  } catch (e) {
170
  logger.error(session, (e as Error).message, request);
171
  }
components/chat/ChatMessage.tsx CHANGED
@@ -23,7 +23,7 @@ import { Button } from '../ui/Button';
23
  import { Dialog, DialogContent, DialogTrigger } from '../ui/Dialog';
24
  import Img from '../ui/Img';
25
  import CodeResultDisplay from '../CodeResultDisplay';
26
- import { useAtom, useSetAtom } from 'jotai';
27
  import { selectedMessageId } from '@/state/chat';
28
  import { Message } from '@prisma/client';
29
  import { Separator } from '../ui/Separator';
 
23
  import { Dialog, DialogContent, DialogTrigger } from '../ui/Dialog';
24
  import Img from '../ui/Img';
25
  import CodeResultDisplay from '../CodeResultDisplay';
26
+ import { useAtom } from 'jotai';
27
  import { selectedMessageId } from '@/state/chat';
28
  import { Message } from '@prisma/client';
29
  import { Separator } from '../ui/Separator';
components/ui/Img.tsx CHANGED
@@ -26,11 +26,7 @@ const Img = React.forwardRef<
26
  : (src as string);
27
  return (
28
  <Image
29
- src={
30
- srcString.includes('vision-agent-dev.s3')
31
- ? encodeURI(srcString)
32
- : srcString
33
- }
34
  placeholder={placeholder}
35
  width={dimensions.width}
36
  height={dimensions.height}
 
26
  : (src as string);
27
  return (
28
  <Image
29
+ src={srcString}
 
 
 
 
30
  placeholder={placeholder}
31
  width={dimensions.width}
32
  height={dimensions.height}
lib/aws.ts CHANGED
@@ -32,7 +32,7 @@ export const getPresignedUrl = async (
32
  return {
33
  id,
34
  signedUrl: res.url,
35
- publicUrl: `https://${process.env.AWS_BUCKET_NAME}.s3.${process.env.AWS_REGION}.amazonaws.com/${signedFileName}`,
36
  fields: res.fields,
37
  };
38
  };
 
32
  return {
33
  id,
34
  signedUrl: res.url,
35
+ publicUrl: `https://${process.env.AWS_BUCKET_NAME}.s3.${process.env.AWS_REGION}.amazonaws.com/${user}/${id}/${encodeURIComponent(fileName)}`,
36
  fields: res.fields,
37
  };
38
  };