-
Notifications
You must be signed in to change notification settings - Fork 5.3k
[Components] ollama: new action components #14278
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
import app from "../../ollama.app.mjs"; | ||
|
||
export default { | ||
key: "ollama-copy-model", | ||
name: "Copy Model", | ||
description: "Copies a model, creating a model with another name from an existing model. [See the documentation](https://github.com/ollama/ollama/blob/main/docs/api.md#copy-a-model).", | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
source: { | ||
propDefinition: [ | ||
app, | ||
"model", | ||
], | ||
}, | ||
destination: { | ||
type: "string", | ||
label: "New Model Name", | ||
description: "The new name for the copied model.", | ||
}, | ||
}, | ||
methods: { | ||
copyModel(args = {}) { | ||
return this.app.post({ | ||
path: "/copy", | ||
...args, | ||
}); | ||
}, | ||
}, | ||
async run({ $ }) { | ||
const { | ||
copyModel, | ||
source, | ||
destination, | ||
} = this; | ||
|
||
await copyModel({ | ||
$, | ||
data: { | ||
source, | ||
destination, | ||
}, | ||
}); | ||
$.export("$summary", "Successfully copied model."); | ||
return { | ||
success: true, | ||
}; | ||
}, | ||
}; | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
import app from "../../ollama.app.mjs"; | ||
|
||
export default { | ||
key: "ollama-create-model", | ||
name: "Create Model", | ||
description: "Create a model from a modelfile. [See the documentation](https://github.com/ollama/ollama/blob/main/docs/api.md#create-a-model).", | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
name: { | ||
type: "string", | ||
label: "Name", | ||
description: "The name of the model.", | ||
}, | ||
modelfile: { | ||
type: "string", | ||
label: "Model File", | ||
description: "Contents of the Modelfile. Eg. `FROM llama3 SYSTEM You are mario from Super Mario Bros`", | ||
}, | ||
jcortes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
stream: { | ||
propDefinition: [ | ||
app, | ||
"stream", | ||
], | ||
}, | ||
}, | ||
methods: { | ||
createModel(args = {}) { | ||
return this.app.post({ | ||
path: "/create", | ||
...args, | ||
}); | ||
}, | ||
}, | ||
async run({ $ }) { | ||
const { | ||
createModel, | ||
name, | ||
modelfile, | ||
stream, | ||
} = this; | ||
|
||
const response = await createModel({ | ||
$, | ||
data: { | ||
name, | ||
modelfile, | ||
stream, | ||
}, | ||
}); | ||
$.export("$summary", "Successfully created model."); | ||
return response; | ||
}, | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
import app from "../../ollama.app.mjs"; | ||
|
||
export default { | ||
key: "ollama-delete-model", | ||
name: "Delete Model", | ||
description: "Delete a model and its data. [See the documentation](https://github.com/ollama/ollama/blob/main/docs/api.md#delete-a-model)", | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
name: { | ||
propDefinition: [ | ||
app, | ||
"model", | ||
], | ||
}, | ||
}, | ||
methods: { | ||
deleteModel(args = {}) { | ||
return this.app.delete({ | ||
path: "/delete", | ||
...args, | ||
}); | ||
}, | ||
}, | ||
async run({ $ }) { | ||
const { | ||
deleteModel, | ||
name, | ||
} = this; | ||
|
||
await deleteModel({ | ||
$, | ||
data: { | ||
name, | ||
}, | ||
}); | ||
$.export("$summary", "Successfully deleted model."); | ||
return { | ||
success: true, | ||
}; | ||
}, | ||
jcortes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
import app from "../../ollama.app.mjs"; | ||
import utils from "../../common/utils.mjs"; | ||
|
||
export default { | ||
key: "ollama-generate-chat-completion", | ||
name: "Generate Chat Completion", | ||
description: "Generates the next message in a chat with a provided model. [See the documentation](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion).", | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
model: { | ||
propDefinition: [ | ||
app, | ||
"model", | ||
], | ||
}, | ||
messages: { | ||
type: "string[]", | ||
label: "Messages", | ||
description: "The messages of the chat, this can be used to keep a chat memory. Each row should be set as a JSON format string. Eg. `{\"role\": \"user\", \"content\": \"Hello\"}`. The message object has the following fields:\n- `role`: the role of the message, either `system`, `user`, `assistant`, or `tool`.\n- `content`: The content of the message.\n- `images` (optional): a list of images to include in the message (for multimodal models such as `llava`).\n- `tool_calls`(optional): a list of tools the model wants to use.", | ||
}, | ||
jcortes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
tools: { | ||
type: "string[]", | ||
label: "Tools", | ||
description: "A list of tools the model can use. Each row should be set as a JSON format string.", | ||
optional: true, | ||
}, | ||
GTFalcao marked this conversation as resolved.
Show resolved
Hide resolved
|
||
options: { | ||
propDefinition: [ | ||
app, | ||
"options", | ||
], | ||
}, | ||
stream: { | ||
propDefinition: [ | ||
app, | ||
"stream", | ||
], | ||
}, | ||
keepAlive: { | ||
propDefinition: [ | ||
app, | ||
"keepAlive", | ||
], | ||
}, | ||
}, | ||
methods: { | ||
generateChatCompletion(args = {}) { | ||
return this.app.post({ | ||
path: "/chat", | ||
...args, | ||
}); | ||
}, | ||
}, | ||
Comment on lines
+48
to
+55
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance error handling in the While the method is correctly implemented, it lacks error handling. Consider adding a try-catch block to provide more informative feedback in case of API errors: generateChatCompletion(args = {}) {
return this.app.post({
path: "/chat",
...args,
}).catch(error => {
throw new Error(`Failed to generate chat completion: ${error.message}`);
});
}, This will help in debugging and provide clearer error messages to the user. |
||
async run({ $ }) { | ||
const { | ||
generateChatCompletion, | ||
model, | ||
messages, | ||
tools, | ||
options, | ||
stream, | ||
keepAlive, | ||
} = this; | ||
|
||
const response = await generateChatCompletion({ | ||
$, | ||
data: { | ||
model, | ||
messages: utils.parseArray(messages), | ||
tools: utils.parseArray(tools), | ||
options: utils.parseOptions(options), | ||
stream, | ||
keep_alive: keepAlive, | ||
}, | ||
}); | ||
|
||
$.export("$summary", "Successfully generated chat completion."); | ||
return response; | ||
}, | ||
Comment on lines
+56
to
+81
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Improve error handling and clean up undefined properties in the
try {
const response = await generateChatCompletion({
// ... existing code ...
});
$.export("$summary", "Successfully generated chat completion.");
return response;
} catch (error) {
$.export("$summary", `Failed to generate chat completion: ${error.message}`);
throw error;
}
const data = {
model,
messages: utils.parseArray(messages),
tools: utils.parseArray(tools),
options: utils.parseOptions(options),
stream,
keep_alive: keepAlive,
};
const response = await generateChatCompletion({
$,
data: Object.fromEntries(Object.entries(data).filter(([_, v]) => v != null)),
}); These changes will improve error reporting and prevent sending undefined properties to the API. |
||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
import utils from "../../common/utils.mjs"; | ||
import app from "../../ollama.app.mjs"; | ||
|
||
export default { | ||
key: "ollama-generate-completion", | ||
name: "Generate Completion", | ||
description: "Generates a response for a given prompt with a provided model. [See the documentation](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion).", | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
model: { | ||
propDefinition: [ | ||
app, | ||
"model", | ||
], | ||
}, | ||
prompt: { | ||
propDefinition: [ | ||
app, | ||
"prompt", | ||
], | ||
}, | ||
suffix: { | ||
propDefinition: [ | ||
app, | ||
"suffix", | ||
], | ||
}, | ||
images: { | ||
propDefinition: [ | ||
app, | ||
"images", | ||
], | ||
}, | ||
options: { | ||
propDefinition: [ | ||
app, | ||
"options", | ||
], | ||
}, | ||
stream: { | ||
propDefinition: [ | ||
app, | ||
"stream", | ||
], | ||
}, | ||
keepAlive: { | ||
propDefinition: [ | ||
app, | ||
"keepAlive", | ||
], | ||
}, | ||
}, | ||
methods: { | ||
generateCompletion(args = {}) { | ||
return this.app.post({ | ||
path: "/generate", | ||
...args, | ||
}); | ||
}, | ||
jcortes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
}, | ||
jcortes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
async run({ $ }) { | ||
const { | ||
generateCompletion, | ||
model, | ||
prompt, | ||
suffix, | ||
images, | ||
options, | ||
stream, | ||
keepAlive, | ||
} = this; | ||
|
||
const response = await generateCompletion({ | ||
$, | ||
data: { | ||
model, | ||
prompt, | ||
suffix, | ||
images, | ||
options: utils.parseOptions(options), | ||
stream, | ||
keep_alive: keepAlive, | ||
}, | ||
}); | ||
$.export("$summary", "Successfully generated completion."); | ||
return response; | ||
}, | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
import utils from "../../common/utils.mjs"; | ||
import app from "../../ollama.app.mjs"; | ||
|
||
export default { | ||
key: "ollama-generate-embeddings", | ||
name: "Generate Embeddings", | ||
description: "Generate embeddings from a model. [See the documentation](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-embeddings).", | ||
version: "0.0.1", | ||
type: "action", | ||
props: { | ||
app, | ||
model: { | ||
propDefinition: [ | ||
app, | ||
"model", | ||
], | ||
}, | ||
input: { | ||
type: "string[]", | ||
label: "Input", | ||
description: "The list of texts to generate embeddings for.", | ||
}, | ||
truncate: { | ||
type: "boolean", | ||
label: "Truncate", | ||
description: "Truncates the end of each input to fit within context length. Returns error if `false` and context length is exceeded. Defaults to `true`.", | ||
optional: true, | ||
}, | ||
options: { | ||
propDefinition: [ | ||
app, | ||
"options", | ||
], | ||
}, | ||
keepAlive: { | ||
propDefinition: [ | ||
app, | ||
"keepAlive", | ||
], | ||
}, | ||
}, | ||
methods: { | ||
generateEmbeddings(args = {}) { | ||
return this.app.post({ | ||
path: "/embed", | ||
...args, | ||
}); | ||
}, | ||
}, | ||
async run({ $ }) { | ||
const { | ||
generateEmbeddings, | ||
model, | ||
input, | ||
truncate, | ||
options, | ||
keepAlive, | ||
} = this; | ||
|
||
const response = await generateEmbeddings({ | ||
$, | ||
data: { | ||
model, | ||
input, | ||
truncate, | ||
options: utils.parseOptions(options), | ||
keep_alive: keepAlive, | ||
}, | ||
}); | ||
$.export("$summary", "Successfully generated embeddings."); | ||
return response; | ||
}, | ||
}; |
Uh oh!
There was an error while loading. Please reload this page.