-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
feat: add LlamaIndex TS support to JS SDK #1178
base: master
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
parameters: { | ||
type: "object", | ||
properties: schema.parameters.properties || {}, | ||
required: schema.parameters.required || [], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The getTools
function in llamaindex.ts
does not correctly handle the case where schema.parameters
is undefined. This can lead to a runtime error when trying to access properties
or required
.
owner: "composioHQ", | ||
repo: "composio", | ||
}, | ||
entityId: "default", | ||
connectedAccountId: "9442cab3-d54f-4903-976c-ee67ef506c9b", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test Should create custom action to star a repository
in llamaindex.spec.ts
uses hardcoded values for connectedAccountId
and the repository details. This makes the test less robust and prone to failures if these values change.
await llamaindexToolSet.createAction({ | ||
actionName: "starRepositoryCustomAction", | ||
toolName: "github", | ||
description: "This action stars a repository", | ||
inputParams: z.object({ | ||
owner: z.string(), | ||
repo: z.string(), | ||
}), | ||
callback: async ( | ||
inputParams, | ||
_authCredentials, | ||
executeRequest | ||
): Promise<ActionExecuteResponse> => { | ||
const res = await executeRequest({ | ||
endpoint: `/user/starred/${inputParams.owner}/${inputParams.repo}`, | ||
method: "PUT", | ||
parameters: [], | ||
}); | ||
return res; | ||
}, | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The createAction
call in the test Should create custom action to star a repository
lacks proper error handling. If the action creation fails, the test will not fail and the subsequent getTools
and executeAction
calls might behave unexpectedly.
This comment was generated by github-actions[bot]! JS SDK Coverage Report📊 Coverage report for JS SDK can be found at the following URL: 📁 Test report folder can be found at the following URL: |
🚀 Code review completed! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 Looks good to me! Reviewed everything up to b7a8481 in 58 seconds
More details
- Looked at
192
lines of code in3
files - Skipped
0
files when reviewing. - Skipped posting
4
drafted comments based on config settings.
1. js/src/frameworks/llamaindex.spec.ts:16
- Draft comment:
The test name 'getools' is not descriptive. Consider renaming it to something more meaningful, like 'should return tools array'. - Reason this comment was not posted:
Confidence changes required:50%
The test name 'getools' is not descriptive and seems to be a typo. It should be more descriptive to reflect the test's purpose.
2. js/src/frameworks/llamaindex.spec.ts:22
- Draft comment:
The test case 'check if tools are coming' is redundant with 'check if getTools, actions are coming'. Consider removing one to avoid duplication. - Reason this comment was not posted:
Confidence changes required:50%
The test case 'check if tools are coming' and 'check if getTools, actions are coming' are redundant as they perform the same check. One of them should be removed to avoid duplication.
3. js/src/frameworks/llamaindex.spec.ts:63
- Draft comment:
Typo in variable name 'actionOuput'. It should be 'actionOutput'. - Reason this comment was not posted:
Confidence changes required:50%
The variable name 'actionOuput' is misspelled. It should be 'actionOutput'.
4. js/src/frameworks/llamaindex.ts:36
- Draft comment:
Avoid using 'any' type for 'schema'. Use a more specific type to ensure type safety. - Reason this comment was not posted:
Confidence changes required:50%
The use of 'any' type in TypeScript should be avoided as it defeats the purpose of type safety. A more specific type should be used for 'schema'.
Workflow ID: wflow_1ImRrec93dw0lj3s
You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet
mode, and more.
import { ActionExecuteResponse } from "../sdk/models/actions"; | ||
import { LlamaIndexToolSet } from "./llamaindex"; | ||
|
||
describe("Apps class tests", () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test suite description Apps class tests
is misleading as it's testing the LlamaIndexToolSet class. Consider renaming it to LlamaIndexToolSet tests
for better clarity.
}); | ||
} | ||
|
||
private _wrapTool( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The _wrapTool
method accepts schema: any
as a parameter type. Consider creating a proper interface for better type safety:
interface ToolSchema {
name: string;
description: string;
parameters: {
properties?: Record<string, unknown>;
required?: string[];
};
}
entityId: Optional<string> = null | ||
): FunctionTool<Record<string, unknown>, JSONValue | Promise<JSONValue>> { | ||
return FunctionTool.from( | ||
async (params: Record<string, unknown>) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider adding error handling for the JSON parsing operation:
try {
return JSON.parse(JSON.stringify(result)) as JSONValue;
} catch (error) {
throw new Error(`Failed to parse tool result: ${error.message}`);
}
This would provide better error messages and make debugging easier.
Code Review SummaryOverall AssessmentThe implementation of LlamaIndex TypeScript framework support is well-structured and follows the established patterns in the codebase. The code is generally clean and functional, with good test coverage. Positive Aspects
Suggestions for Improvement
Code Quality Rating: 8/10The code is well-implemented and follows good practices, with minor improvements suggested for type safety and documentation. |
@abhishekpatil4 Couple of actions are failing, please fix them |
parameters: { | ||
type: "object", | ||
properties: schema.parameters.properties || {}, | ||
required: schema.parameters.required || [], | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The getTools
function in llamaindex.ts
does not correctly handle the case when schema.parameters
is null or undefined, which could lead to a runtime error.
it("getools", async () => { | ||
const tools = await llamaindexToolSet.getTools({ | ||
apps: ["github"], | ||
}); | ||
expect(tools).toBeInstanceOf(Array); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test getools
in llamaindex.spec.ts
doesn't assert anything meaningful. It only checks the type of the return, not the content.
it("Should create custom action to star a repository", async () => { | ||
await llamaindexToolSet.createAction({ | ||
actionName: "starRepositoryCustomAction", | ||
toolName: "github", | ||
description: "This action stars a repository", | ||
inputParams: z.object({ | ||
owner: z.string(), | ||
repo: z.string(), | ||
}), | ||
callback: async ( | ||
inputParams, | ||
_authCredentials, | ||
executeRequest | ||
): Promise<ActionExecuteResponse> => { | ||
const res = await executeRequest({ | ||
endpoint: `/user/starred/${inputParams.owner}/${inputParams.repo}`, | ||
method: "PUT", | ||
parameters: [], | ||
}); | ||
return res; | ||
}, | ||
}); | ||
|
||
const tools = await llamaindexToolSet.getTools({ | ||
actions: ["starRepositoryCustomAction"], | ||
}); | ||
|
||
await expect(tools.length).toBe(1); | ||
const actionOuput = await llamaindexToolSet.executeAction({ | ||
action: "starRepositoryCustomAction", | ||
params: { | ||
owner: "composioHQ", | ||
repo: "composio", | ||
}, | ||
entityId: "default", | ||
connectedAccountId: "9442cab3-d54f-4903-976c-ee67ef506c9b", | ||
}); | ||
|
||
expect(actionOuput).toHaveProperty("successful", true); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test suite in llamaindex.spec.ts
is missing a test to verify that the createAction
method adds a new action correctly. The current test only checks if the number of tools increased but not the properties of the new tool/action.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
❌ Changes requested. Incremental review on 769477f in 59 seconds
More details
- Looked at
26
lines of code in1
files - Skipped
0
files when reviewing. - Skipped posting
0
drafted comments based on config settings.
Workflow ID: wflow_bml1QyLngGW09OCX
Want Ellipsis to fix these issues? Tag @ellipsis-dev
in a comment. You can customize Ellipsis with 👍 / 👎 feedback, review rules, user-specific overrides, quiet
mode, and more.
js/src/frameworks/llamaindex.ts
Outdated
type ToolSchema = { | ||
name: string; | ||
description: string; | ||
parameters: Record<string, unknown>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The parameters
property in ToolSchema
is defined as Record<string, unknown>
, but it is accessed as if it has properties
and required
fields in _wrapTool
. Consider defining parameters
with a more specific type that includes properties
and required
fields to avoid potential runtime errors.
parameters: { | ||
type: "object", | ||
properties: schema.parameters.properties || {}, | ||
required: schema.parameters.required || [], | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The getTools
function in llamaindex.ts
does not correctly handle the case where parameters
is undefined in the tool schema. This could lead to a runtime error when trying to access schema.parameters.properties
or schema.parameters.required
.
it("getools", async () => { | ||
const tools = await llamaindexToolSet.getTools({ | ||
apps: ["github"], | ||
}); | ||
expect(tools).toBeInstanceOf(Array); | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test getools
in llamaindex.spec.ts
doesn't assert anything meaningful. It only checks if the returned value is an array, but not its contents. This test should verify the expected tools are returned.
…ovements) (#1175) Co-authored-by: Himanshu Dixit <[email protected]>
Co-authored-by: Viraj <[email protected]>
Co-authored-by: Himanshu Dixit <[email protected]>
Generated with ❤️ by ellipsis.dev |
Important
Add LlamaIndex framework support to JS SDK with implementation and tests.
LlamaIndexToolSet
class inllamaindex.ts
for LlamaIndex framework support.getTools()
and_wrapTool()
methods for tool management.llamaindex.spec.ts
with test cases forLlamaIndexToolSet
.llamaindex
topeerDependencies
anddevDependencies
inpackage.json
.LlamaIndexToolSet
inindex.ts
.This description was created by for 2d8a8ba. It will automatically update as commits are pushed.