Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding evals for natural language workflow building. #14417

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import app from "../../aitable_ai.app.mjs";

export default {
key: "aitable_ai-create-datasheet",
name: "Create Datasheet",
description: "Create a datasheet in the specified space. [See the documentation](https://developers.aitable.ai/api/reference#tag/Datasheet/operation/create-datasheets)",
version: "0.0.1",
type: "action",
props: {
app,
spaceId: {
propDefinition: [
app,
"spaceId",
],
},
name: {
propDefinition: [
app,
"name",
],
},
description: {
propDefinition: [
app,
"description",
],
},
folderId: {
propDefinition: [
app,
"folderId",
],
},
},

async run({ $ }) {
const response = await this.app.createDatasheet({
$,
spaceId: this.spaceId,
data: {
name: this.name,
description: this.description,
folderId: this.folderId,
},
});
$.export("$summary", `Successfully created Datasheet with ID '${response.data.id}'`);
return response;
},
};
44 changes: 44 additions & 0 deletions components/aitable_ai/actions/create-field/create-field.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import app from "../../aitable_ai.app.mjs";

export default {
key: "aitable_ai-create-field",
name: "Create Field",
description: "Create a new field in the specified datasheet. [See the documentation](https://developers.aitable.ai/api/reference#tag/Field/operation/create-fields)",
version: "0.0.1",
type: "action",
props: {
app,
spaceId: {
propDefinition: [
app,
"spaceId",
],
},
type: {
propDefinition: [
app,
"type",
],
},
name: {
propDefinition: [
app,
"name",
],
description: "Name of the Field",
},
},

async run({ $ }) {
const response = await this.app.createField({
$,
spaceId: this.spaceId,
data: {
type: this.type,
name: this.name,
},
});
$.export("$summary", `Successfully sent request to create field. Result: '${response.message}'`);
return response;
},
};
34 changes: 34 additions & 0 deletions components/aitable_ai/actions/delete-field/delete-field.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import app from "../../aitable_ai.app.mjs";

export default {
key: "aitable_ai-delete-field",
name: "Delete Field",
description: "Delete a field in the specified datasheet. [See the documentation](https://developers.aitable.ai/api/reference/#tag/Field/operation/delete-fields)",
version: "0.0.1",
type: "action",
props: {
app,
spaceId: {
propDefinition: [
app,
"spaceId",
],
},
fieldId: {
propDefinition: [
app,
"fieldId",
],
},
},

async run({ $ }) {
const response = await this.app.deleteField({
$,
spaceId: this.spaceId,
fieldId: this.fieldId,
});
$.export("$summary", `Successfully deleted the field with ID '${this.fieldId}'`);
return response;
},
};
120 changes: 115 additions & 5 deletions components/aitable_ai/aitable_ai.app.mjs
Original file line number Diff line number Diff line change
@@ -1,11 +1,121 @@
import { axios } from "@pipedream/platform";
import constants from "./common/constants.mjs";

export default {
type: "app",
app: "aitable_ai",
propDefinitions: {},
propDefinitions: {
spaceId: {
type: "string",
label: "Space ID",
description: "ID of the Space",
async options() {
const response = await this.getSpaces({});
const spaceIds = response.data.spaces;
return spaceIds.map(({
id, name,
}) => ({
value: id,
label: name,
}));
},
},
fieldId: {
type: "string",
label: "Field ID",
description: "ID of the Field",
async options() {
const response = await this.getFields({});
const fieldIds = response.data.fields;
return fieldIds.map(({
id, name,
}) => ({
value: id,
label: name,
}));
},
},
name: {
type: "string",
label: "Name",
description: "Name of the Datasheet",
},
description: {
type: "string",
label: "Description",
description: "Description of the Datasheet",
},
folderId: {
type: "string",
label: "Folder ID",
description: "The Folder ID is located in the `URL` when the folder is selected on the `Workbench page`, i.e.: if the URL is `https://aitable.ai/workbench/123456`, the `Folder ID` is 123456",
optional: true,
},
type: {
type: "string",
label: "Type",
description: "Type of the Field",
options: constants.FIELD_TYPES,
},
},
methods: {
// this.$auth contains connected account data
authKeys() {
console.log(Object.keys(this.$auth));
_baseUrl() {
return "https://aitable.ai/fusion/v1";
},
async _makeRequest(opts = {}) {
const {
$ = this,
path,
headers,
...otherOpts
} = opts;
return axios($, {
...otherOpts,
url: this._baseUrl() + path,
headers: {
...headers,
Authorization: `Bearer ${this.$auth.api_token}`,
},
});
},
async createDatasheet({
spaceId, ...args
}) {
return this._makeRequest({
path: `/spaces/${spaceId}/datasheets`,
method: "post",
...args,
});
},
async createField({
spaceId, ...args
}) {
return this._makeRequest({
path: `/spaces/${spaceId}/datasheets/${this.$auth.datasheet_id}/fields`,
method: "post",
...args,
});
},
async deleteField({
spaceId, fieldId, ...args
}) {
return this._makeRequest({
path: `/spaces/${spaceId}/datasheets/${this.$auth.datasheet_id}/fields/${fieldId}`,
method: "delete",
...args,
});
},
async getSpaces(args = {}) {
return this._makeRequest({
path: "/spaces",
...args,
});
},
async getFields(args = {}) {
return this._makeRequest({
path: `/datasheets/${this.$auth.datasheet_id}/fields`,
...args,
});
},
},
};
};
11 changes: 11 additions & 0 deletions components/aitable_ai/common/constants.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export default {
FIELD_TYPES: [
"Text",
"URL",
"Phone",
"Email",
"WorkDoc",
"AutoNumber",
"CreatedBy",
],
};
7 changes: 5 additions & 2 deletions components/aitable_ai/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pipedream/aitable_ai",
"version": "0.0.1",
"version": "0.1.0",
"description": "Pipedream AITable.ai Components",
"main": "aitable_ai.app.mjs",
"keywords": [
Expand All @@ -11,5 +11,8 @@
"author": "Pipedream <[email protected]> (https://pipedream.com/)",
"publishConfig": {
"access": "public"
},
"dependencies": {
"@pipedream/platform": "^3.0.3"
}
}
}
84 changes: 84 additions & 0 deletions components/everhour/actions/create-task/create-task.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { STATUS_OPTIONS } from "../../common/constants.mjs";
import { parseObject } from "../../common/utils.mjs";
import everhour from "../../everhour.app.mjs";

export default {
key: "everhour-create-task",
name: "Create Task",
description: "Creates a new task in Everhour. [See the documentation](https://everhour.docs.apiary.io/)",
version: "0.0.1",
type: "action",
props: {
everhour,
projectId: {
propDefinition: [
everhour,
"projectId",
],
},
name: {
type: "string",
label: "Task Name",
description: "The name of the task to be created.",
},
sectionId: {
propDefinition: [
everhour,
"sectionId",
({ projectId }) => ({
projectId,
}),
],
},
tags: {
propDefinition: [
everhour,
"tags",
],
optional: true,
},
position: {
type: "integer",
label: "Position",
description: "The position of the task",
optional: true,
},
description: {
type: "string",
label: "Description",
description: "A description of the task",
optional: true,
},
dueOn: {
type: "string",
label: "Due Date",
description: "The due date of the task. **Format: YYYY-MM-DD**",
optional: true,
},
status: {
type: "string",
label: "Status",
description: "The status of the task",
options: STATUS_OPTIONS,
optional: true,
},
},
async run({ $ }) {
const response = await this.everhour.createTask({
$,
projectId: this.projectId,
data: {
name: this.name,
section: this.sectionId,
tags: this.tags && parseObject(this.tags),
position: this.position,
description: this.description,
dueOn: this.dueOn,
status: this.status,
},
});

$.export("$summary", `Successfully created task with ID: ${response.id}`);
return response;
},
};
Loading
Loading