From 3ca3fb219702d08223575d1a86fca5998da81d05 Mon Sep 17 00:00:00 2001 From: arshad Date: Sat, 15 Feb 2025 15:50:09 +0530 Subject: [PATCH] docs: update --- docs/configuration/register-options.md | 15 ++++++--------- packages/monacopilot/src/prompt.ts | 16 +++++++++++----- playground/app/api/code-completion/route.ts | 6 +++--- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/docs/configuration/register-options.md b/docs/configuration/register-options.md index d01a27f..60e14bc 100644 --- a/docs/configuration/register-options.md +++ b/docs/configuration/register-options.md @@ -12,21 +12,18 @@ The `trigger` option determines when the completion service provides code comple ```javascript registerCompletion(monaco, editor, { - trigger: 'onTyping', + trigger: 'onTyping', // Only recommended for low-latency and low-cost models }); ``` -| Trigger | Description | Notes | -| -------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `'onIdle'` (default) | Provides completions after a brief pause in typing. | This approach is less resource-intensive, as it only initiates a request when the editor is idle. | -| `'onTyping'` | Provides completions in real-time as you type. | Best suited for models with low response latency, such as Groq models or Claude 3-5 Haiku. This trigger mode initiates additional background requests to deliver real-time suggestions, a method known as predictive caching. | -| `'onDemand'` | Does not provide completions automatically. | Completions are triggered manually using the `trigger` function from the `registerCompletion` return. This allows for precise control over when completions are provided. | +| Trigger | Description | Notes | +| -------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `'onIdle'` (default) | Provides completions after a brief pause in typing. | This approach is less resource-intensive, as it only initiates a request when the editor is idle. | +| `'onTyping'` | Provides completions in real-time as you type. | Best suited for models with low response latency, such as Groq models. This trigger mode initiates additional background requests to deliver real-time suggestions, a method known as predictive caching. | +| `'onDemand'` | Does not provide completions automatically. | Completions are triggered manually using the `trigger` function from the `registerCompletion` return. This allows for precise control over when completions are provided. | [OnTyping Demo](https://github.com/user-attachments/assets/22c2ce44-334c-4963-b853-01b890b8e39f) -> [!NOTE] -> If you prefer real-time completions, you can set the `trigger` option to `'onTyping'`. This may increase the number of requests made to the provider and the cost. This should not be too costly since most small models are very inexpensive. - ## Manually Trigger Completions If you prefer not to trigger completions automatically (e.g., on typing or on idle), you can trigger completions manually. This is useful in scenarios where you want to control when completions are provided, such as through a button click or a keyboard shortcut. diff --git a/packages/monacopilot/src/prompt.ts b/packages/monacopilot/src/prompt.ts index 92c7ba3..03946ef 100644 --- a/packages/monacopilot/src/prompt.ts +++ b/packages/monacopilot/src/prompt.ts @@ -11,7 +11,7 @@ const compileRelatedFiles = (files?: RelatedFile[]): string => { return files .map(({path, content}) => { return ` -### ${path} +### Path: ${path} \`\`\` ${content} \`\`\``.trim(); @@ -19,7 +19,9 @@ ${content} .join('\n\n'); }; -export const craftCompletionPrompt = (meta: CompletionMetadata): PromptData => { +export const craftCompletionPrompt = ( + metadata: CompletionMetadata, +): PromptData => { const { technologies = [], filename, @@ -28,7 +30,7 @@ export const craftCompletionPrompt = (meta: CompletionMetadata): PromptData => { textBeforeCursor = '', textAfterCursor = '', editorState: {completionMode}, - } = meta; + } = metadata; const mergedTechStack = joinWithAnd( [language, ...technologies].filter( @@ -37,7 +39,7 @@ export const craftCompletionPrompt = (meta: CompletionMetadata): PromptData => { ); const systemInstruction = ` -You are an expert code completion assistant. +You are an EXCELLENT code completion assistant. **Context:** File: ${filename || 'Untitled'} @@ -56,7 +58,11 @@ ${textBeforeCursor}${textAfterCursor} ${capitalizeFirstLetter(completionMode)} the code at . -Output only the raw code to be inserted at the cursor location without any additional text, comments, or code block syntax.`; +**Completion Constraints** +1. MUST start with: "${textBeforeCursor.slice(-1)}" +2. MUST end before: "${textAfterCursor.slice(0, 1)}" + +Output ONLY the raw code to be inserted at the cursor location without any additional text, comments, or code block syntax.`; return { system: systemInstruction, diff --git a/playground/app/api/code-completion/route.ts b/playground/app/api/code-completion/route.ts index f097c86..2272391 100644 --- a/playground/app/api/code-completion/route.ts +++ b/playground/app/api/code-completion/route.ts @@ -2,9 +2,9 @@ import {NextRequest, NextResponse} from 'next/server'; import {CompletionCopilot} from 'monacopilot'; -const copilot = new CompletionCopilot(process.env.GROQ_API_KEY, { - provider: 'groq', - model: 'llama-3-70b', +const copilot = new CompletionCopilot(process.env.OPENAI_API_KEY, { + provider: 'openai', + model: 'gpt-4o-mini', }); export async function POST(req: NextRequest) {