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