mirror of https://github.com/dapr/quickstarts.git
Conversation JS HTTP Quickstart (#1154)
* Added Quickstart for Javascript Conversation HTTP api Signed-off-by: Constantin Chirila <constantin@diagrid.io> * Minor change Signed-off-by: Constantin Chirila <constantin@diagrid.io> * Updated Readme Signed-off-by: Constantin Chirila <constantin@diagrid.io> * Removed redundant check on response Signed-off-by: Constantin Chirila <constantin@diagrid.io> * Updated Readme Signed-off-by: Constantin Chirila <constantin@diagrid.io> --------- Signed-off-by: Constantin Chirila <constantin@diagrid.io> Co-authored-by: Constantin Chirila <constantin@diagrid.io>
This commit is contained in:
parent
45133b8e4a
commit
e01cc78df5
|
|
@ -0,0 +1,99 @@
|
||||||
|
# Dapr Conversation API (JS HTTP)
|
||||||
|
|
||||||
|
In this quickstart, you'll send an input to a mock Large Language Model (LLM) using Dapr's Conversation API. This API is responsible for providing one consistent API entry point to talk to underlying LLM providers.
|
||||||
|
|
||||||
|
Visit [this](https://v1-15.docs.dapr.io/developing-applications/building-blocks/conversation/conversation-overview/) link for more information about Dapr and the Conversation API.
|
||||||
|
|
||||||
|
> **Note:** This example leverages HTTP `requests` only.
|
||||||
|
|
||||||
|
This quickstart includes one app:
|
||||||
|
|
||||||
|
- `index.js`, responsible for sending an input to the underlying LLM and retrieving an output.
|
||||||
|
|
||||||
|
## Run the app with the template file
|
||||||
|
|
||||||
|
This section shows how to run the application using the [multi-app run template files](https://docs.dapr.io/developing-applications/local-development/multi-app-dapr-run/multi-app-overview/) with `dapr run -f .`.
|
||||||
|
|
||||||
|
This example uses the default LLM Component provided by Dapr which simply echoes the input provided, for testing purposes. Here are other [supported Conversation components](https://v1-15.docs.dapr.io/reference/components-reference/supported-conversation/).
|
||||||
|
|
||||||
|
1. Install dependencies:
|
||||||
|
|
||||||
|
<!-- STEP
|
||||||
|
name: Install Node dependencies for conversation
|
||||||
|
-->
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ./conversation
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- END_STEP -->
|
||||||
|
|
||||||
|
2. Open a new terminal window and run the multi app run template:
|
||||||
|
|
||||||
|
<!-- STEP
|
||||||
|
name: Run multi app run template
|
||||||
|
expected_stdout_lines:
|
||||||
|
- '== APP - conversation == Input sent: What is dapr?'
|
||||||
|
- '== APP - conversation == Output response: What is dapr?'
|
||||||
|
expected_stderr_lines:
|
||||||
|
output_match_mode: substring
|
||||||
|
match_order: none
|
||||||
|
background: true
|
||||||
|
sleep: 15
|
||||||
|
timeout_seconds: 30
|
||||||
|
-->
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dapr run -f .
|
||||||
|
```
|
||||||
|
|
||||||
|
The terminal console output should look similar to this, where:
|
||||||
|
|
||||||
|
- The app sends an input `What is dapr?` to the `echo` Component mock LLM.
|
||||||
|
- The mock LLM echoes `What is dapr?`.
|
||||||
|
|
||||||
|
```text
|
||||||
|
== APP - conversation == Input sent: What is dapr?
|
||||||
|
== APP - conversation == Output response: What is dapr?
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- END_STEP -->
|
||||||
|
|
||||||
|
3. Stop and clean up application processes.
|
||||||
|
|
||||||
|
<!-- STEP
|
||||||
|
name: Stop multi-app run
|
||||||
|
sleep: 5
|
||||||
|
-->
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dapr stop -f .
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- END_STEP -->
|
||||||
|
|
||||||
|
## Run the app individually
|
||||||
|
|
||||||
|
1. Open a terminal and navigate to the `conversation` app. Install the dependencies if you haven't already.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ./conversation
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run the Dapr process alongside the application.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dapr run --app-id conversation --resources-path ../../../components/ -- npm run start
|
||||||
|
```
|
||||||
|
|
||||||
|
The terminal console output should look similar to this, where:
|
||||||
|
|
||||||
|
- The app sends an input `What is dapr?` to the `echo` Component mock LLM.
|
||||||
|
- The mock LLM echoes `What is dapr?`.
|
||||||
|
|
||||||
|
```text
|
||||||
|
== APP - conversation == Input sent: What is dapr?
|
||||||
|
== APP - conversation == Output response: What is dapr?
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
const conversationComponentName = "echo";
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const daprHost = process.env.DAPR_HOST || "http://localhost";
|
||||||
|
const daprHttpPort = process.env.DAPR_HTTP_PORT || "3500";
|
||||||
|
|
||||||
|
const inputBody = {
|
||||||
|
name: "echo",
|
||||||
|
inputs: [{ message: "What is dapr?" }],
|
||||||
|
parameters: {},
|
||||||
|
metadata: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
const reqURL = `${daprHost}:${daprHttpPort}/v1.0-alpha1/conversation/${conversationComponentName}/converse`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch(reqURL, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify(inputBody),
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("Input sent: What is dapr?");
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
const result = data.outputs[0].result;
|
||||||
|
console.log("Output response:", result);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error:", error.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main().catch((error) => {
|
||||||
|
console.error("Unhandled error:", error);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"name": "conversation",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "conversation",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"name": "conversation",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node index.js",
|
||||||
|
"start:dapr": "dapr run --app-id conversation --resources-path ../../../components/ -- npm start"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
version: 1
|
||||||
|
common:
|
||||||
|
resourcesPath: ../../components/
|
||||||
|
apps:
|
||||||
|
- appID: conversation
|
||||||
|
appDirPath: ./conversation/
|
||||||
|
daprHTTPPort: 3502
|
||||||
|
command: ["npm", "run", "start"]
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
include ../../../docker.mk
|
||||||
|
include ../../../validate.mk
|
||||||
Loading…
Reference in New Issue