generated from kyoh86/denops-boilerplate.vim
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
42 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
function ollama#generate_completion() abort | ||
let l:prompt = input("Prompt:") | ||
call denops#notify("ollama", "generate_completion", ["codellama", l:prompt, {}]) | ||
endfunction |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,10 @@ | ||
import { | ||
ensure, | ||
is, | ||
ObjectOf as O, | ||
Predicate as P, | ||
} from "https://deno.land/x/[email protected]/mod.ts"; | ||
import { isFormat, RequestOptions, Result } from "./types.ts"; | ||
import { parseJSONList } from "./base.ts"; | ||
import { parseJSONStream } from "./base.ts"; | ||
import { doPost } from "./base.ts"; | ||
|
||
// Definitions for the endpoint to "Generate a completion" | ||
|
@@ -77,30 +76,16 @@ export const isGenerateCompletionResponse: P<GenerateCompletionResponse> = is | |
generateCompletionResponseFields, | ||
); | ||
|
||
export async function generateCompletion( | ||
param: GenerateCompletionParam & { stream?: true }, | ||
options?: RequestOptions, | ||
): Promise<Result<GenerateCompletionResponse[]>>; | ||
|
||
export async function generateCompletion( | ||
param: GenerateCompletionParam & { stream: false }, | ||
options?: RequestOptions, | ||
): Promise<Result<GenerateCompletionResponse>>; | ||
|
||
/** Generate a response for a given prompt with a provided model. | ||
* This is a streaming endpoint, so there will be a series of responses. | ||
* The final response object will include statistics and additional data from the request. | ||
*/ | ||
export async function generateCompletion( | ||
param: GenerateCompletionParam, | ||
options?: RequestOptions, | ||
): Promise<Result<GenerateCompletionResponse[] | GenerateCompletionResponse>> { | ||
const response = await doPost("/api/generate", param, options); | ||
if (param.stream === undefined || param.stream) { | ||
return await parseJSONList(response, isGenerateCompletionResponse); | ||
} | ||
return { | ||
response, | ||
body: ensure(await response.json(), isGenerateCompletionResponse), | ||
}; | ||
) { | ||
return parseJSONStream( | ||
await doPost("/api/generate", param, options), | ||
isGenerateCompletionResponse, | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,9 @@ | ||
import { Denops } from "https://deno.land/x/[email protected]/mod.ts"; | ||
import { batch } from "https://deno.land/x/[email protected]/batch/mod.ts"; | ||
import xdg from "https://deno.land/x/[email protected]/src/mod.deno.ts"; | ||
import { join } from "https://deno.land/[email protected]/path/mod.ts"; | ||
import { ensureFile } from "https://deno.land/[email protected]/fs/mod.ts"; | ||
import { ensure, is } from "https://deno.land/x/[email protected]/mod.ts"; | ||
import * as fn from "https://deno.land/x/[email protected]/function/mod.ts"; | ||
import * as v from "https://deno.land/x/[email protected]/variable/mod.ts"; | ||
import { | ||
getLogger, | ||
handlers, | ||
|
@@ -49,17 +47,20 @@ export async function main(denops: Denops) { | |
const prompt = ensure(uPrompt, is.String); | ||
const context = ensure(uContext, is.Record); | ||
console.debug(`reserved context: ${context}`); | ||
const result = await generateCompletion({ | ||
model, | ||
prompt, | ||
}); | ||
const result = await generateCompletion({ model, prompt }); | ||
const bufnr = await fn.bufadd(denops, "ollama://outputs"); | ||
await fn.bufload(denops, bufnr); | ||
await fn.appendbufline( | ||
denops, | ||
bufnr, | ||
"$", | ||
result.body.map((entry) => entry.response).join(""), | ||
await result.body?.pipeTo( | ||
new WritableStream({ | ||
write: async (chunk) => { | ||
const lastLine = await fn.getbufline(denops, bufnr, "$"); | ||
const newLines = chunk.response.split(/\r?\n/); | ||
await fn.setbufline(denops, bufnr, "$", lastLine + newLines[0]); | ||
if (newLines.length > 0) { | ||
await fn.appendbufline(denops, bufnr, "$", newLines.slice(1)); | ||
} | ||
}, | ||
}), | ||
); | ||
} catch (err) { | ||
getLogger("denops-ollama").error(err); | ||
|