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

@effectai/sdk patch V2.0.1 #124

Merged
merged 14 commits into from
May 19, 2024
6 changes: 6 additions & 0 deletions .changeset/new-chairs-provide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@effectai/sdk": patch
---

- add symlinks for license and README
- fix createBatch types
21 changes: 0 additions & 21 deletions LICENSE

This file was deleted.

1 change: 1 addition & 0 deletions LICENSE
28 changes: 0 additions & 28 deletions README.md

This file was deleted.

1 change: 1 addition & 0 deletions README.md
Binary file modified bun.lockb
Binary file not shown.
3 changes: 3 additions & 0 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
},
"dependencies": {},
"devDependencies": {
"@wharfkit/wallet-plugin-anchor": "^1.0.0",
"@wharfkit/web-renderer": "^1.0.3",
"@wharfkit/wallet-plugin-privatekey": "1.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"vocs": "^1.0.0-alpha.46",
Expand Down
62 changes: 62 additions & 0 deletions docs/pages/docs/authentication.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Authentication
Some functions in the Effect AI SDK require authentication with the EOS blockchain. This is done by passing a session object to the createClient function.
A session can be established by either [private key](https://github.com/wharfkit/wallet-plugin-privatekey) or [wallet plugins](https://wharfkit.com/plugins?tag=wallet-plugin).

### Private Key
To authenticate using a private key we recommend using the [wallet-plugin-privatekey](https://github.com/wharfkit/wallet-plugin-privatekey)
And passing it through a session to the `createClient` function.

```ts twoslash
import {
createClient,
eos,
Session
} from "@effectai/sdk";

import { WalletPluginPrivateKey } from '@wharfkit/wallet-plugin-privatekey'

const session = new Session({
chain: eos,
walletPlugin: new WalletPluginPrivateKey(
'5Jtoxgny5tT7NiNFp1MLogviuPJ9NniWjnU4wKzaX4t7pL4kJ8s',
),
})

const client = await createClient({ session })
```

### Wallet Plugin
It's also possible to authenticate using a wallet plugin, for example using the [wallet-plugin-anchor](https://github.com/wharfkit/wallet-plugin-anchor)
This one is a bit more complicated and requires two additional packages: [`@wharfkit/session`](https://github.com/wharfkit/session) and [`@wharfkit/web-renderer`](https://github.com/wharfkit/web-renderer)

```ts twoslash
import {
createClient,
eos,
} from "@effectai/sdk";

import { SessionKit } from "@wharfkit/session";
import { WebRenderer } from "@wharfkit/web-renderer";
import { WalletPluginAnchor } from "@wharfkit/wallet-plugin-anchor";

const webRenderer = new WebRenderer();

const sessionKit = new SessionKit(
{
appName: "Effect Network",
chains: [eos],
ui: webRenderer,
walletPlugins: [
new WalletPluginAnchor(),
],
},
)

const session = await sessionKit.restore();

if(!session) {
throw new Error('Session not found')
}

const client = await createClient({ session })
```
44 changes: 29 additions & 15 deletions docs/pages/docs/collecting-data/adding-tasks.mdx
Original file line number Diff line number Diff line change
@@ -1,30 +1,44 @@
## Adding tasks

Adding tasks to a campaign is done through <u>batches</u> batches are a collection of tasks that are added to a campaign. Each batch can contain multiple tasks.
Let's start by creating a batch with 3 tasks to our newly created image classification campaign.
Adding tasks to a campaign is done through adding <u>batches</u>.

```ts [example.ts]
import { createBatch } from '@effectai/effect-js'
Batches are a collection of tasks that are added to a campaign. Each batch can contain multiple tasks.
Let's start by creating a batch with 3 tasks to our newly created image classification campaign.

```ts twoslash
// [!include ~/snippets/getting-started/getting-started-auth.ts]
if(!client.session) {
throw new Error('No session found')
}
const { actor } = client.session

if(!actor) {
throw new Error('No actor found')
}
//---cut---
import { createBatch } from '@effectai/sdk'

const batch = await createBatch({
client,
batch: {
campaign_id: '<..>', // the id of the campaign
repetitions: 1 // number of times each task should be repeated
payer: actor // the actor that will pay the workers for the tasks
}
data: [
// The campaign id to which the batch should be added
campaignId : 1,
// The number of times each task in the batch should be repeated
repetitions: 1,
// The reward for each task in the batch
reward: 3,
// The template placeholders for each task in the batch
taskData : [
{
image: 'https://example.com/image.jpg', //task 1 image placeholder
ipfs_url: 'https://example.com/image.jpg', //task 1 image placeholder
},
{
image: 'https://example.com/image2.jpg', //task 2 image placeholder
ipfs_url: 'https://example.com/image2.jpg', //task 2 image placeholder
},
{
image: 'https://example.com/image3.jpg', // task 3 image placeholder
ipfs_url: 'https://example.com/image3.jpg', // task 3 image placeholder
}
]
],
})
```

```

3 changes: 3 additions & 0 deletions docs/pages/docs/collecting-data/collecting-results.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## Collecting Results

TODO::
3 changes: 1 addition & 2 deletions docs/pages/docs/glossary/client-options.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ As we can see, the ClientOpts interface has three optional properties:
This property is used to set the cache duration for the IPFS data.
The default value is 600_000 milliseconds; 10 minutes.

## `fetchProfider`
## `fetchProvider`

This property is used to set the fetch provider.
This is needed because of the different runtimes availalbe to Java Script.
Expand Down Expand Up @@ -45,6 +45,5 @@ const client = createClient({
})
```

# TODO: This needs to be changed when the `dev` branch is merged into main.
[See Type](https://github.com/effectai/effect-js/blob/main/src/client.ts)

8 changes: 4 additions & 4 deletions docs/pages/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@ style={{
:::code-group

```bash [npm]
npm i @effectai/effect-js
npm i @effectai/sdk
```

```bash [pnpm]
pnpm i @effectai/effect-js
pnpm i @effectai/sdk
```

```bash [bun]
bun i @effectai/effect-js
bun i @effectai/sdk
```

:::
Expand All @@ -69,7 +69,7 @@ style={{
<span className="font-medium text-[15px] leading-none opacity-80 w-full text-center">coverage</span>
</div>
<div className="flex items-center h-full px-2">
<span className="font-medium text-[15px] leading-none text-center w-full text-green-400">0%</span>
<span className="font-medium text-[15px] leading-none text-center w-full text-green-400">63.34%</span>
</div>
</div>
<div className="absolute left-0 right-0 top-0 bottom-0 bg-green-400 opacity-10 z-[0]" />
Expand Down
Empty file added docs/public/.nojekyll
Empty file.
1 change: 1 addition & 0 deletions docs/public/CNAME
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
docs.effect.ai
5 changes: 5 additions & 0 deletions docs/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export const sidebar = {
items: [
{ text: "Why Effect AI", link: "/docs/introduction" },
{ text: "Getting Started", link: "/docs/getting-started" },
{ text: "Authentication", link: "/docs/authentication" },
],
},
{
Expand All @@ -25,6 +26,10 @@ export const sidebar = {
text: "Adding Tasks to a Campaign",
link: "/docs/collecting-data/adding-tasks",
},
{
text: "Collecting results",
link: "/docs/collecting-data/collecting-results",
},
],
},
{
Expand Down
7 changes: 1 addition & 6 deletions docs/snippets/getting-started/getting-started-auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,4 @@ const session = new Session({
});

// Create client to make authenticated transactions
const authClient = await createClient({ session });

// Create a new Effect Account
const account = "efxforce1112";
const response = await createVAccount({ client: authClient, account });
console.log(response); // => Transaction Details
const client = await createClient({ session });
4 changes: 2 additions & 2 deletions docs/vocs.config.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import pkg from "../src/package.json";
import { sidebar } from "./sidebar";

export default defineConfig({
baseUrl: "https://effect.ai",
title: "Effect JS",
baseUrl: "https://docs.effect.ai",
title: "Effect SDK Docs",
titleTemplate: "%s · Effect.AI",
description:
"Effect-js is a free and open-source library powered by blockchain technology that enables developers to collect and enrich their data-sets in a transparent way.",
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
"changeset:version": "changeset version && bun install --frozen-lockfile && bun scripts/updateVersion.ts",
"docs:dev": "cd docs && bun run dev",
"docs:build": "cd docs && bun run build",
"docs:preview": "cd docs && bun run preview"
"docs:preview": "cd docs && bun run preview",
"link": "cd src && bun link"
},
"devDependencies": {
"@biomejs/biome": "1.7.0",
Expand Down
21 changes: 21 additions & 0 deletions src/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2021 Effect Network

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
33 changes: 23 additions & 10 deletions src/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
# @effectai/sdk
# 🔥 The @effectai/sdk Monorepo

To install dependencies:
<p align="center"><img src="https://effect.network/img/logo/logo.png" width="400px"></p>

```bash
bun install
```
The @effectai/sdk is a free and open source library for training next-gen transparent AI models. Integrate the SDK into your app and tap into a global, decentralized workforce powered by blockchain technology.

To run:
## 🗒️ Documentation
For full documentation, visit https://docs.effect.ai

## 🙋 Contributing
If you want to add contributions to this repository, please follow the instructions in [contributing.md](CONTRIBUTING.md).

## 🏠 Local Development
Follow the docs to Set Up Your Local Development Environment to contribute to the framework and documentation.

### Testing

#### `.env`

To run the tests locally, you will need to provide an EOS account that can be used to make transactions on your behalf.
Copy the `.env.example` file to `.env.testnet` and fill in the required parameters.

#### PowerUp

You might need to power up your account, either by adding some Native Token to your account or EFX tokens.
You can powerup your account at the following link: https://monitor4.jungletestnet.io/

```bash
bun run dist/exports/index.js
```

This project was created using `bun init` in bun v1.1.7. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
11 changes: 3 additions & 8 deletions src/actions/ipfs/uploadIpfsResource.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { Client } from "../../client";
import { Bytes } from "@wharfkit/antelope";
import { Bytes, Base58 } from "@wharfkit/antelope";

export type UploadIpfsResourceArgs = {
client: Client;
data: Record<string, unknown>;
data: Record<string, unknown> | Record<string, unknown>[];
};

export const uploadIpfsResource = async ({
Expand Down Expand Up @@ -46,10 +46,5 @@ export const uploadIpfsResource = async ({
};

export const ipfsCIDToHex = (cid: string): string => {
const string = atob(cid);
const array = new Uint8Array(string.length);
for (let i = 0; i < string.length; i++) {
array[i] = string.charCodeAt(i);
}
return Bytes.from(array).hexString;
return Base58.decode(cid).hexString;
};
2 changes: 1 addition & 1 deletion src/actions/tasks/batch/createBatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export type CreateBatchArgs = {
campaignId: number;
repetitions: number;
reward: number;
taskData: Record<string, unknown>;
taskData: Record<string, unknown>[];
};

export const createBatch = async ({
Expand Down
Loading