mirror of
https://github.com/langgenius/webapp-conversation.git
synced 2026-02-03 09:05:23 +08:00
Compare commits
7 Commits
fix/i18n-f
...
chore/add-
| Author | SHA1 | Date | |
|---|---|---|---|
| 25ef02d2aa | |||
| f6f65cff68 | |||
| 8c6302d1fc | |||
| 291e9a067b | |||
| ac0e3e807d | |||
| b7f703852e | |||
| ef15747e4a |
10
README.md
10
README.md
@ -4,11 +4,15 @@ This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next
|
|||||||
## Config App
|
## Config App
|
||||||
Create a file named `.env.local` in the current directory and copy the contents from `.env.example`. Setting the following content:
|
Create a file named `.env.local` in the current directory and copy the contents from `.env.example`. Setting the following content:
|
||||||
```
|
```
|
||||||
# APP ID
|
# APP ID: This is the unique identifier for your app. You can find it in the app's detail page URL.
|
||||||
|
# For example, in the URL `https://cloud.dify.ai/app/xxx/workflow`, the value `xxx` is your APP ID.
|
||||||
NEXT_PUBLIC_APP_ID=
|
NEXT_PUBLIC_APP_ID=
|
||||||
# APP API key
|
|
||||||
|
# APP API Key: This is the key used to authenticate your app's API requests.
|
||||||
|
# You can generate it on the app's "API Access" page by clicking the "API Key" button in the top-right corner.
|
||||||
NEXT_PUBLIC_APP_KEY=
|
NEXT_PUBLIC_APP_KEY=
|
||||||
# APP URL
|
|
||||||
|
# APP URL: This is the API's base URL. If you're using the Dify cloud service, set it to: https://api.dify.ai/v1.
|
||||||
NEXT_PUBLIC_API_URL=
|
NEXT_PUBLIC_API_URL=
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
export const dynamic = 'force-dynamic'
|
|
||||||
|
|
||||||
import { type NextRequest } from 'next/server'
|
import { type NextRequest } from 'next/server'
|
||||||
import { NextResponse } from 'next/server'
|
import { NextResponse } from 'next/server'
|
||||||
import { client, getInfo, setSession } from '@/app/api/utils/common'
|
import { client, getInfo, setSession } from '@/app/api/utils/common'
|
||||||
@ -11,7 +9,11 @@ export async function GET(request: NextRequest) {
|
|||||||
return NextResponse.json(data, {
|
return NextResponse.json(data, {
|
||||||
headers: setSession(sessionId),
|
headers: setSession(sessionId),
|
||||||
})
|
})
|
||||||
} catch (error) {
|
}
|
||||||
return NextResponse.json([]);
|
catch (error: any) {
|
||||||
|
return NextResponse.json({
|
||||||
|
data: [],
|
||||||
|
error: error.message,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -223,7 +223,12 @@ const Main: FC = () => {
|
|||||||
const [conversationData, appParams] = await Promise.all([fetchConversations(), fetchAppParams()])
|
const [conversationData, appParams] = await Promise.all([fetchConversations(), fetchAppParams()])
|
||||||
|
|
||||||
// handle current conversation id
|
// handle current conversation id
|
||||||
const { data: conversations } = conversationData as { data: ConversationItem[] }
|
const { data: conversations, error } = conversationData as { data: ConversationItem[]; error: string }
|
||||||
|
if (error) {
|
||||||
|
Toast.notify({ type: 'error', message: error })
|
||||||
|
throw new Error(error)
|
||||||
|
return
|
||||||
|
}
|
||||||
const _conversationId = getConversationIdFromStorage(APP_ID)
|
const _conversationId = getConversationIdFromStorage(APP_ID)
|
||||||
const isNotNewConversation = conversations.some(item => item.id === _conversationId)
|
const isNotNewConversation = conversations.some(item => item.id === _conversationId)
|
||||||
|
|
||||||
|
|||||||
@ -122,6 +122,15 @@ const Welcome: FC<IWelcomeProps> = ({
|
|||||||
onChange={(e) => { setInputs({ ...inputs, [item.key]: e.target.value }) }}
|
onChange={(e) => { setInputs({ ...inputs, [item.key]: e.target.value }) }}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{item.type === 'number' && (
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
className="block w-full p-2 text-gray-900 border border-gray-300 rounded-lg bg-gray-50 sm:text-xs focus:ring-blue-500 focus:border-blue-500 "
|
||||||
|
placeholder={`${item.name}${!item.required ? `(${t('appDebug.variableTable.optional')})` : ''}`}
|
||||||
|
value={inputs[item.key]}
|
||||||
|
onChange={(e) => { onInputsChange({ ...inputs, [item.key]: e.target.value }) }}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -37,6 +37,8 @@ export type UserInputFormItem = {
|
|||||||
'text-input': TextTypeFormItem
|
'text-input': TextTypeFormItem
|
||||||
} | {
|
} | {
|
||||||
'select': SelectTypeFormItem
|
'select': SelectTypeFormItem
|
||||||
|
} | {
|
||||||
|
'paragraph': TextTypeFormItem
|
||||||
}
|
}
|
||||||
|
|
||||||
export const MessageRatings = ['like', 'dislike', null] as const
|
export const MessageRatings = ['like', 'dislike', null] as const
|
||||||
|
|||||||
@ -24,8 +24,12 @@ export const userInputsFormToPromptVariables = (useInputs: UserInputFormItem[] |
|
|||||||
if (item['text-input'])
|
if (item['text-input'])
|
||||||
return ['string', item['text-input']]
|
return ['string', item['text-input']]
|
||||||
|
|
||||||
|
if (item.number)
|
||||||
|
return ['number', item.number]
|
||||||
|
|
||||||
return ['select', item.select]
|
return ['select', item.select]
|
||||||
})()
|
})()
|
||||||
|
|
||||||
if (type === 'string' || type === 'paragraph') {
|
if (type === 'string' || type === 'paragraph') {
|
||||||
promptVariables.push({
|
promptVariables.push({
|
||||||
key: content.variable,
|
key: content.variable,
|
||||||
@ -36,6 +40,15 @@ export const userInputsFormToPromptVariables = (useInputs: UserInputFormItem[] |
|
|||||||
options: [],
|
options: [],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
else if (type === 'number') {
|
||||||
|
promptVariables.push({
|
||||||
|
key: content.variable,
|
||||||
|
name: content.label,
|
||||||
|
required: content.required,
|
||||||
|
type,
|
||||||
|
options: [],
|
||||||
|
})
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
promptVariables.push({
|
promptVariables.push({
|
||||||
key: content.variable,
|
key: content.variable,
|
||||||
|
|||||||
Reference in New Issue
Block a user