@zhiweiliu/playwright-generator 1.0.30 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -17
- package/dist/cli.js +21 -17
- package/dist/cli.js.map +1 -1
- package/dist/commands/generate.d.ts +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +4 -4
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.js +80 -80
- package/dist/commands/init.js.map +1 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/llm/chatgpt.js +2 -2
- package/dist/llm/chatgpt.js.map +1 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +4 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/local.d.ts +9 -0
- package/dist/llm/local.d.ts.map +1 -0
- package/dist/llm/local.js +55 -0
- package/dist/llm/local.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,6 +22,17 @@ This module streamlines the generation of Playwright test cases by integrating w
|
|
|
22
22
|
- [Best Practices](#best-practices)
|
|
23
23
|
- [Troubleshooting](#troubleshooting)
|
|
24
24
|
- [GitHub Integration](#github-integration)
|
|
25
|
+
- [Local LLM Setup (Ollama)](#local-llm-setup-ollama)
|
|
26
|
+
- [How It Works](#how-it-works)
|
|
27
|
+
- [1. Install Ollama](#1-install-ollama)
|
|
28
|
+
- [2. Start the Ollama Server](#2-start-the-ollama-server)
|
|
29
|
+
- [3. Pull a Model](#3-pull-a-model)
|
|
30
|
+
- [4. Configure .env](#4-configure-env)
|
|
31
|
+
- [5. Generate a Test Case](#5-generate-a-test-case)
|
|
32
|
+
- [Recommended Models](#recommended-models)
|
|
33
|
+
- [Qwen Models](#qwen-models-by-alibaba)
|
|
34
|
+
- [DeepSeek Models](#deepseek-models-by-deepseek-ai)
|
|
35
|
+
- [Using LM Studio](#using-lm-studio-alternative)
|
|
25
36
|
- [Contributing](#contributing)
|
|
26
37
|
- [Development Setup](#development-setup)
|
|
27
38
|
- [License](#license)
|
|
@@ -76,6 +87,7 @@ The installed module will have amazing features to facilitate your day-to-day te
|
|
|
76
87
|
- Claude: Anthropic API key with Claude access enabled (visit https://console.anthropic.com/)
|
|
77
88
|
- Azure OpenAI: Azure subscription with an OpenAI resource and deployment
|
|
78
89
|
- ChatGPT: OpenAI API key (visit https://platform.openai.com/)
|
|
90
|
+
- Local LLM: Ollama installed locally (no API key required — see [Local LLM Setup](#local-llm-setup-ollama))
|
|
79
91
|
|
|
80
92
|
## Installation & Quick Start
|
|
81
93
|
|
|
@@ -134,14 +146,16 @@ project-root/
|
|
|
134
146
|
|
|
135
147
|
```env
|
|
136
148
|
# AI Model Configuration
|
|
137
|
-
AI_MODEL=claude
|
|
138
|
-
CLAUDE_API_KEY=sk-ant-...
|
|
139
|
-
AZURE_OPENAI_API_KEY=
|
|
140
|
-
AZURE_OPENAI_ENDPOINT=
|
|
141
|
-
AZURE_OPENAI_DEPLOYMENT=
|
|
142
|
-
AZURE_OPENAI_API_VERSION=2024-02-01
|
|
143
|
-
CHATGPT_API_KEY=
|
|
144
|
-
CHATGPT_MODEL=gpt-4o
|
|
149
|
+
AI_MODEL=claude # Options: claude, azure-openai, chatgpt, local
|
|
150
|
+
CLAUDE_API_KEY=sk-ant-... # Required if using Claude (starts with sk-ant-)
|
|
151
|
+
AZURE_OPENAI_API_KEY= # Required if using Azure OpenAI
|
|
152
|
+
AZURE_OPENAI_ENDPOINT= # e.g. https://<resource>.openai.azure.com
|
|
153
|
+
AZURE_OPENAI_DEPLOYMENT= # e.g. gpt-4o
|
|
154
|
+
AZURE_OPENAI_API_VERSION=2024-02-01 # Optional, defaults to 2024-02-01
|
|
155
|
+
CHATGPT_API_KEY= # Required if using ChatGPT (starts with sk-)
|
|
156
|
+
CHATGPT_MODEL=gpt-4o # Optional, defaults to gpt-4o
|
|
157
|
+
LOCAL_LLM_URL=http://localhost:11434 # Required if using local LLM (Ollama default)
|
|
158
|
+
LOCAL_LLM_MODEL=llama3 # Required if using local LLM (e.g. llama3, codellama, qwen2.5-coder)
|
|
145
159
|
|
|
146
160
|
# Playwright Configuration
|
|
147
161
|
BROWSER=chromium # Options: chromium, firefox, webkit
|
|
@@ -206,6 +220,7 @@ Playwright test automation code is generated by running a command, with generate
|
|
|
206
220
|
- **Claude**: Anthropic Claude 3 Haiku API (widely available)
|
|
207
221
|
- **Azure OpenAI**: Azure-hosted OpenAI models (e.g. gpt-4o)
|
|
208
222
|
- **ChatGPT**: OpenAI API (e.g. gpt-4o)
|
|
223
|
+
- **Local LLM**: Any Ollama-compatible local model (e.g. llama3, codellama, qwen2.5-coder, deepseek-coder-v2)
|
|
209
224
|
|
|
210
225
|
The generator now strips Markdown and explanation text from model output automatically, keeping only the extracted TypeScript test function before writing to `generated/*.test.ts`.
|
|
211
226
|
|
|
@@ -223,6 +238,9 @@ npx playwright-generator generate --tc TC-0001 --model azure-openai
|
|
|
223
238
|
# Generate with ChatGPT
|
|
224
239
|
npx playwright-generator generate --tc TC-0001 --model chatgpt
|
|
225
240
|
|
|
241
|
+
# Generate with local LLM
|
|
242
|
+
npx playwright-generator generate --tc TC-0001 --model local
|
|
243
|
+
|
|
226
244
|
# Generate to specific output file
|
|
227
245
|
npx playwright-generator generate --tc TC-0001 --output login.test.ts
|
|
228
246
|
|
|
@@ -324,14 +342,17 @@ Workflow file location: `.github/workflows/playwright-tests.yml`
|
|
|
324
342
|
|
|
325
343
|
**Common Issues**:
|
|
326
344
|
|
|
327
|
-
| Issue | Solution
|
|
328
|
-
| ----------------------------------- |
|
|
329
|
-
| `API key not found` | Verify `.env` file exists and `CLAUDE_API_KEY` or `AZURE_OPENAI_API_KEY` is set
|
|
345
|
+
| Issue | Solution |
|
|
346
|
+
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
347
|
+
| `API key not found` | Verify `.env` file exists and `CLAUDE_API_KEY` or `AZURE_OPENAI_API_KEY` is set |
|
|
330
348
|
| `Claude API connection failed` | Check `CLAUDE_API_KEY` is valid and account has Claude API access; ensure key starts with `sk-ant-`. Visit https://console.anthropic.com/ to enable Claude API. Uses Claude 3 Haiku which is widely available. |
|
|
331
|
-
| `Tests timing out` | Increase `TIMEOUT` in `.env` or use explicit waits in test cases
|
|
332
|
-
| `Generated code doesn't compile` | Review the natural language description for clarity; regenerate with a refined prompt
|
|
333
|
-
| `Tests pass locally but fail in CI` | Check `BASE_URL` environment variable and add debugging with screenshots
|
|
334
|
-
| `Selector not found` | Ensure selectors are unique and reference current UI state
|
|
349
|
+
| `Tests timing out` | Increase `TIMEOUT` in `.env` or use explicit waits in test cases |
|
|
350
|
+
| `Generated code doesn't compile` | Review the natural language description for clarity; regenerate with a refined prompt |
|
|
351
|
+
| `Tests pass locally but fail in CI` | Check `BASE_URL` environment variable and add debugging with screenshots |
|
|
352
|
+
| `Selector not found` | Ensure selectors are unique and reference current UI state |
|
|
353
|
+
| `ECONNREFUSED` (local LLM) | Ollama server is not running — run `ollama serve` |
|
|
354
|
+
| `model not found` (local LLM) | Run `ollama pull <model>` first |
|
|
355
|
+
| Slow local LLM generation | Local models are slower than cloud APIs; expect 30–120s; try `mistral` for speed |
|
|
335
356
|
|
|
336
357
|
### GitHub Integration
|
|
337
358
|
|
|
@@ -339,6 +360,141 @@ Workflow file location: `.github/workflows/playwright-tests.yml`
|
|
|
339
360
|
- Tests also run on a scheduled basis (daily at midnight UTC)
|
|
340
361
|
- Workflow status badges can be added to the README to display test status
|
|
341
362
|
|
|
363
|
+
## Local LLM Setup (Ollama)
|
|
364
|
+
|
|
365
|
+
Run a local LLM with `playwright-generator` using [Ollama](https://ollama.com), which exposes an OpenAI-compatible API on your machine — no API keys or internet access required.
|
|
366
|
+
|
|
367
|
+
### How It Works
|
|
368
|
+
|
|
369
|
+
The `local` provider sends requests to `LOCAL_LLM_URL/v1/chat/completions`, the standard endpoint exposed by Ollama. Any other local server that implements the same OpenAI-compatible API (e.g. LM Studio, llama.cpp server) will also work.
|
|
370
|
+
|
|
371
|
+
### 1. Install Ollama
|
|
372
|
+
|
|
373
|
+
**macOS / Linux**:
|
|
374
|
+
```bash
|
|
375
|
+
curl -fsSL https://ollama.com/install.sh | sh
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
**macOS (Homebrew)**:
|
|
379
|
+
```bash
|
|
380
|
+
brew install ollama
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**Windows**: Download the installer from https://ollama.com/download
|
|
384
|
+
|
|
385
|
+
### 2. Start the Ollama Server
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
ollama serve
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
By default, Ollama listens on `http://localhost:11434`. The OpenAI-compatible endpoint is available at `http://localhost:11434/v1/chat/completions`.
|
|
392
|
+
|
|
393
|
+
### 3. Pull a Model
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
# General purpose — good balance of speed and quality
|
|
397
|
+
ollama pull llama3
|
|
398
|
+
|
|
399
|
+
# Smaller / faster — good for low-resource machines
|
|
400
|
+
ollama pull mistral
|
|
401
|
+
|
|
402
|
+
# Code-focused — best results for test generation
|
|
403
|
+
ollama pull codellama
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
To list all models you have pulled:
|
|
407
|
+
```bash
|
|
408
|
+
ollama list
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### 4. Configure .env
|
|
412
|
+
|
|
413
|
+
```env
|
|
414
|
+
AI_MODEL=local
|
|
415
|
+
LOCAL_LLM_URL=http://localhost:11434 # Ollama default; change if using a different port
|
|
416
|
+
LOCAL_LLM_MODEL=llama3 # Must match the model name you pulled
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
### 5. Generate a Test Case
|
|
420
|
+
|
|
421
|
+
```bash
|
|
422
|
+
npx playwright-generator generate --tc TC-0001 --model local
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
Or set `AI_MODEL=local` in `.env` and omit the `--model` flag:
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
npx playwright-generator generate --tc TC-0001
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Recommended Models
|
|
432
|
+
|
|
433
|
+
| Model | Size | Best For |
|
|
434
|
+
|---|---|---|
|
|
435
|
+
| `llama3` | ~4.7 GB | General use, good code quality |
|
|
436
|
+
| `codellama` | ~3.8 GB | Code generation tasks |
|
|
437
|
+
| `mistral` | ~4.1 GB | Fast, low memory usage |
|
|
438
|
+
| `llama3:8b` | ~8 GB | Higher quality output |
|
|
439
|
+
| `deepseek-coder` | ~3.8 GB | Code-focused, strong TypeScript |
|
|
440
|
+
| `deepseek-coder-v2` | ~8.9 GB | Stronger code quality than v1 |
|
|
441
|
+
| `deepseek-r1` | ~4.7 GB | Reasoning-focused, good for complex logic |
|
|
442
|
+
| `qwen2.5-coder` | ~4.7 GB | Strong TypeScript/code generation |
|
|
443
|
+
| `qwen2.5` | ~4.7 GB | General use, multilingual |
|
|
444
|
+
|
|
445
|
+
### Qwen Models (by Alibaba)
|
|
446
|
+
|
|
447
|
+
Qwen models perform well for code generation tasks and are fully supported by Ollama.
|
|
448
|
+
|
|
449
|
+
```bash
|
|
450
|
+
ollama pull qwen2.5-coder # Recommended for code generation
|
|
451
|
+
ollama pull qwen2.5-coder:7b # Larger variant for higher quality
|
|
452
|
+
ollama pull qwen2.5 # General purpose
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
```env
|
|
456
|
+
AI_MODEL=local
|
|
457
|
+
LOCAL_LLM_URL=http://localhost:11434
|
|
458
|
+
LOCAL_LLM_MODEL=qwen2.5-coder
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
> Tip: `qwen2.5-coder` is specifically trained on code and tends to produce cleaner TypeScript than general-purpose models of the same size.
|
|
462
|
+
|
|
463
|
+
### DeepSeek Models (by DeepSeek AI)
|
|
464
|
+
|
|
465
|
+
DeepSeek offers both code-focused and reasoning models, both fully supported by Ollama.
|
|
466
|
+
|
|
467
|
+
```bash
|
|
468
|
+
ollama pull deepseek-coder-v2 # Code-focused (recommended for test generation)
|
|
469
|
+
ollama pull deepseek-r1 # Reasoning model — good for complex multi-step test logic
|
|
470
|
+
ollama pull deepseek-coder # Smaller/faster code model
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
```env
|
|
474
|
+
AI_MODEL=local
|
|
475
|
+
LOCAL_LLM_URL=http://localhost:11434
|
|
476
|
+
LOCAL_LLM_MODEL=deepseek-coder-v2
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
> Tip: `deepseek-r1` uses chain-of-thought reasoning internally, which can improve accuracy for complex test cases but is slower than `deepseek-coder-v2`.
|
|
480
|
+
|
|
481
|
+
### Using LM Studio (Alternative)
|
|
482
|
+
|
|
483
|
+
[LM Studio](https://lmstudio.ai) also exposes an OpenAI-compatible server:
|
|
484
|
+
|
|
485
|
+
1. Download and install LM Studio from https://lmstudio.ai
|
|
486
|
+
2. Download a model inside the app (e.g. `Meta-Llama-3-8B-Instruct`)
|
|
487
|
+
3. Start the local server from the **Local Server** tab (default port: `1234`)
|
|
488
|
+
4. Set in `.env`:
|
|
489
|
+
|
|
490
|
+
```env
|
|
491
|
+
AI_MODEL=local
|
|
492
|
+
LOCAL_LLM_URL=http://localhost:1234
|
|
493
|
+
LOCAL_LLM_MODEL=Meta-Llama-3-8B-Instruct # Must match the model name shown in LM Studio
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
> Note: Local models are slower than cloud APIs — expect 30–120 seconds per generation depending on hardware. No data leaves your machine.
|
|
497
|
+
|
|
342
498
|
## Contributing
|
|
343
499
|
|
|
344
500
|
Contributions are welcome! Please follow these guidelines:
|
|
@@ -375,5 +531,3 @@ MIT License - See LICENSE file for details
|
|
|
375
531
|
For issues, questions, or suggestions, please open an issue on GitHub or contact the maintainers.
|
|
376
532
|
|
|
377
533
|
---
|
|
378
|
-
|
|
379
|
-
**Happy Testing! 🎭**
|
package/dist/cli.js
CHANGED
|
@@ -12,7 +12,7 @@ const program = new commander_1.Command();
|
|
|
12
12
|
program
|
|
13
13
|
.name("playwright-generator")
|
|
14
14
|
.description("Generate Playwright test cases from natural language using LLM")
|
|
15
|
-
.version("1.0.
|
|
15
|
+
.version("1.0.32");
|
|
16
16
|
// Init command
|
|
17
17
|
program
|
|
18
18
|
.command("init [projectPath]")
|
|
@@ -31,7 +31,7 @@ program
|
|
|
31
31
|
.command("generate")
|
|
32
32
|
.description("Generate Playwright test code from natural language test cases")
|
|
33
33
|
.option("-tc, --tc <testCaseIds>", "Comma-separated test case IDs (e.g., TC-0001,TC-0002)")
|
|
34
|
-
.option("-m, --model <model>", "LLM model to use (claude, azure-openai or
|
|
34
|
+
.option("-m, --model <model>", "LLM model to use (claude, azure-openai, chatgpt or local)", "claude")
|
|
35
35
|
.option("-o, --output <outputFile>", "Output file name (relative to generated/ folder)")
|
|
36
36
|
.action(async (options) => {
|
|
37
37
|
try {
|
|
@@ -67,27 +67,31 @@ File name: *.test.md
|
|
|
67
67
|
|
|
68
68
|
Format:
|
|
69
69
|
-------
|
|
70
|
-
#
|
|
70
|
+
# Test Case: <Title>
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
[TC-XXXX] [TAG1] [TAG2]
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
And
|
|
74
|
+
## Description
|
|
75
|
+
|
|
76
|
+
- Given the initial state or precondition
|
|
77
|
+
- When the user performs an action
|
|
78
|
+
- And additional actions
|
|
79
|
+
- Then expected result should occur
|
|
80
|
+
- And another expected result
|
|
79
81
|
|
|
80
82
|
Example:
|
|
81
83
|
--------
|
|
82
|
-
#
|
|
84
|
+
# Test Case: User Login
|
|
85
|
+
|
|
86
|
+
[TC-0001] [SMOKE] [LOGIN]
|
|
83
87
|
|
|
84
|
-
##
|
|
88
|
+
## User logs in with valid credentials
|
|
85
89
|
|
|
86
|
-
Given the user is on the login page
|
|
87
|
-
When the user enters username and password
|
|
88
|
-
And clicks the login button
|
|
89
|
-
Then the user should see the dashboard
|
|
90
|
-
And the welcome message should contain the user name
|
|
90
|
+
- Given the user is on the login page
|
|
91
|
+
- When the user enters username and password
|
|
92
|
+
- And clicks the login button
|
|
93
|
+
- Then the user should see the dashboard
|
|
94
|
+
- And the welcome message should contain the user name
|
|
91
95
|
|
|
92
96
|
Tags:
|
|
93
97
|
-----
|
|
@@ -99,7 +103,7 @@ Tips for better AI-generated code:
|
|
|
99
103
|
1. Use clear, specific language
|
|
100
104
|
2. Mention element types (button, input, link, etc.)
|
|
101
105
|
3. Include exact text or identifiers when possible
|
|
102
|
-
4. Use Given-When-Then structure for clarity
|
|
106
|
+
4. Use Given-When-Then structure with bullet points (-) for clarity
|
|
103
107
|
5. Keep test cases focused on one feature
|
|
104
108
|
6. Review generated code before committing
|
|
105
109
|
`));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,kDAAuD;AACvD,kDAA0B;AAE1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;IAC5B,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAA,wBAAiB,EAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CACL,yBAAyB,EACzB,uDAAuD,CACxD;KACA,MAAM,CACL,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,kDAAuD;AACvD,kDAA0B;AAE1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,sBAAsB,CAAC;KAC5B,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,QAAQ,CAAC,CAAC;AAErB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;IAC5B,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAA,wBAAiB,EAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,MAAM,CACL,yBAAyB,EACzB,uDAAuD,CACxD;KACA,MAAM,CACL,qBAAqB,EACrB,2DAA2D,EAC3D,QAAQ,CACT;KACA,MAAM,CACL,2BAA2B,EAC3B,kDAAkD,CACnD;KACA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CACT,sEAAsE,CACvE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,IAAA,2BAAgB,EAAC,WAAW,EAAE;YAClC,WAAW;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAC9B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgDZ,CAAC,CACD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface GenerateOptions {
|
|
2
2
|
testCaseIds?: string[];
|
|
3
|
-
model?: "
|
|
3
|
+
model?: "claude" | "azure-openai" | "chatgpt" | "local";
|
|
4
4
|
outputFile?: string;
|
|
5
5
|
}
|
|
6
6
|
export declare function generateTestCode(projectRoot: string, options: GenerateOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Gf;AA0FD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0FzD"}
|
|
@@ -122,9 +122,9 @@ function extractTestCaseContent(fileContent, testCaseId) {
|
|
|
122
122
|
if (startIndex === -1) {
|
|
123
123
|
throw new Error(`Test case [${testCaseId}] not found in file`);
|
|
124
124
|
}
|
|
125
|
-
// Find the start of this test case (previous "## Test Case:" or beginning of file)
|
|
125
|
+
// Find the start of this test case (previous "# Test Case:" / "## Test Case:" heading or beginning of file)
|
|
126
126
|
for (let i = startIndex - 1; i >= 0; i--) {
|
|
127
|
-
if (lines[i].trim()
|
|
127
|
+
if (/^#{1,2}\s+Test Case:/i.test(lines[i].trim())) {
|
|
128
128
|
startIndex = i;
|
|
129
129
|
break;
|
|
130
130
|
}
|
|
@@ -132,9 +132,9 @@ function extractTestCaseContent(fileContent, testCaseId) {
|
|
|
132
132
|
startIndex = 0;
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
-
// Find the end of this test case (next "## Test Case:" or end of file)
|
|
135
|
+
// Find the end of this test case (next "# Test Case:" / "## Test Case:" heading or end of file)
|
|
136
136
|
for (let i = startIndex + 1; i < lines.length; i++) {
|
|
137
|
-
if (lines[i].trim()
|
|
137
|
+
if (/^#{1,2}\s+Test Case:/i.test(lines[i].trim()) && i > startIndex) {
|
|
138
138
|
endIndex = i;
|
|
139
139
|
break;
|
|
140
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -27,7 +27,7 @@ async function initializeProject(projectPath) {
|
|
|
27
27
|
}
|
|
28
28
|
// Copy .env.example to project
|
|
29
29
|
const envExampleContent = `# AI Model Configuration
|
|
30
|
-
AI_MODEL=claude # Options: claude, azure-openai
|
|
30
|
+
AI_MODEL=claude # Options: claude, azure-openai, chatgpt, local
|
|
31
31
|
CLAUDE_API_KEY= # Required if using Claude (starts with sk-ant-)
|
|
32
32
|
AZURE_OPENAI_API_KEY= # Required if using Azure OpenAI
|
|
33
33
|
AZURE_OPENAI_ENDPOINT= # e.g. https://<resource>.openai.azure.com
|
|
@@ -35,6 +35,8 @@ AZURE_OPENAI_DEPLOYMENT= # e.g. gpt-4o
|
|
|
35
35
|
AZURE_OPENAI_API_VERSION=2024-02-01 # Optional, defaults to 2024-02-01
|
|
36
36
|
CHATGPT_API_KEY= # Required if using ChatGPT (starts with sk-)
|
|
37
37
|
CHATGPT_MODEL=gpt-4o # Optional, defaults to gpt-4o
|
|
38
|
+
LOCAL_LLM_URL=http://localhost:11434 # Required if using local LLM (Ollama default)
|
|
39
|
+
LOCAL_LLM_MODEL=llama3 # Required if using local LLM (e.g. llama3, mistral, codellama)
|
|
38
40
|
|
|
39
41
|
# Playwright Configuration
|
|
40
42
|
BROWSER=chromium
|
|
@@ -134,109 +136,107 @@ export default defineConfig({
|
|
|
134
136
|
await fs_extra_1.default.writeFile(path_1.default.join(projectRoot, "tsconfig.json"), JSON.stringify(tsconfig, null, 2));
|
|
135
137
|
console.log(chalk_1.default.green("✓ Created tsconfig.json"));
|
|
136
138
|
// Create sample test cases
|
|
137
|
-
const saucedemoSampleContent = `#
|
|
138
|
-
|
|
139
|
-
This file contains sample natural language test cases for the SauceDemo e-commerce website (https://saucedemo.com). These test cases demonstrate comprehensive testing scenarios with detailed step-by-step descriptions.
|
|
140
|
-
|
|
141
|
-
## Test Case: Complete Purchase Flow
|
|
139
|
+
const saucedemoSampleContent = `# Test Case: Complete Purchase Flow
|
|
142
140
|
|
|
143
141
|
[TC-SAMPLE-0001] [SMOKE] [PURCHASE] [END-TO-END]
|
|
144
|
-
Complete e-commerce purchase flow from login to order confirmation
|
|
145
142
|
|
|
146
|
-
|
|
147
|
-
When the user enters "standard_user" as the username
|
|
148
|
-
And the user enters "secret_sauce" as the password
|
|
149
|
-
And the user clicks the "Login" button
|
|
150
|
-
Then the user should be redirected to the products page
|
|
151
|
-
And the page title should contain "Products"
|
|
143
|
+
## Complete e-commerce purchase flow from login to order confirmation
|
|
152
144
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
And the
|
|
156
|
-
And the
|
|
145
|
+
- Given the user navigates to the SauceDemo login page at https://saucedemo.com
|
|
146
|
+
- When the user enters "standard_user" as the username
|
|
147
|
+
- And the user enters "secret_sauce" as the password
|
|
148
|
+
- And the user clicks the "Login" button
|
|
149
|
+
- Then the user should be redirected to the products page
|
|
150
|
+
- And the page title should contain "Products"
|
|
157
151
|
|
|
158
|
-
When the user clicks the "
|
|
159
|
-
Then the
|
|
160
|
-
And the
|
|
152
|
+
- When the user clicks on the "Sauce Labs Backpack" product
|
|
153
|
+
- Then the product details page should open
|
|
154
|
+
- And the product name should be "Sauce Labs Backpack"
|
|
155
|
+
- And the product price should be displayed
|
|
161
156
|
|
|
162
|
-
When the user clicks the
|
|
163
|
-
Then the cart
|
|
164
|
-
And the "
|
|
165
|
-
And the quantity should be 1
|
|
166
|
-
And the price should match the product page
|
|
157
|
+
- When the user clicks the "Add to Cart" button
|
|
158
|
+
- Then the cart icon should show "1" item
|
|
159
|
+
- And the "Add to Cart" button should change to "Remove"
|
|
167
160
|
|
|
168
|
-
When the user clicks the
|
|
169
|
-
Then the
|
|
161
|
+
- When the user clicks the cart icon in the top right
|
|
162
|
+
- Then the cart page should open
|
|
163
|
+
- And the "Sauce Labs Backpack" should be listed in the cart
|
|
164
|
+
- And the quantity should be 1
|
|
165
|
+
- And the price should match the product page
|
|
170
166
|
|
|
171
|
-
When the user
|
|
172
|
-
|
|
173
|
-
And the user enters "12345" as the zip code
|
|
174
|
-
And the user clicks the "Continue" button
|
|
175
|
-
Then the checkout overview page should open
|
|
176
|
-
And the item total should be calculated correctly
|
|
177
|
-
And the tax should be applied
|
|
178
|
-
And the total amount should be displayed
|
|
167
|
+
- When the user clicks the "Checkout" button
|
|
168
|
+
- Then the checkout information page should open
|
|
179
169
|
|
|
180
|
-
When the user
|
|
181
|
-
|
|
182
|
-
And
|
|
183
|
-
And the
|
|
170
|
+
- When the user enters "John" as the first name
|
|
171
|
+
- And the user enters "Doe" as the last name
|
|
172
|
+
- And the user enters "12345" as the zip code
|
|
173
|
+
- And the user clicks the "Continue" button
|
|
174
|
+
- Then the checkout overview page should open
|
|
175
|
+
- And the item total should be calculated correctly
|
|
176
|
+
- And the tax should be applied
|
|
177
|
+
- And the total amount should be displayed
|
|
184
178
|
|
|
185
|
-
|
|
179
|
+
- When the user clicks the "Finish" button
|
|
180
|
+
- Then the order confirmation page should open
|
|
181
|
+
- And a success message "Thank you for your order!" should be displayed
|
|
182
|
+
- And the order number should be shown
|
|
183
|
+
|
|
184
|
+
# Test Case: Product Browsing and Cart Management
|
|
186
185
|
|
|
187
186
|
[TC-SAMPLE-0002] [REGRESSION] [BROWSING] [CART]
|
|
188
|
-
Browse products, sort items, and manage cart contents
|
|
189
187
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
188
|
+
## Browse products, sort items, and manage cart contents
|
|
189
|
+
|
|
190
|
+
- Given the user is logged in to SauceDemo with valid credentials
|
|
191
|
+
- When the user is on the products page
|
|
192
|
+
- Then all products should be displayed in a grid layout
|
|
193
|
+
- And each product should show name, price, and "Add to Cart" button
|
|
194
194
|
|
|
195
|
-
When the user clicks the sort dropdown
|
|
196
|
-
Then sorting options should be displayed: Name (A to Z), Name (Z to A), Price (low to high), Price (high to low)
|
|
195
|
+
- When the user clicks the sort dropdown
|
|
196
|
+
- Then sorting options should be displayed: Name (A to Z), Name (Z to A), Price (low to high), Price (high to low)
|
|
197
197
|
|
|
198
|
-
When the user selects "Name (A to Z)" from the sort dropdown
|
|
199
|
-
Then products should be sorted alphabetically by name in ascending order
|
|
200
|
-
And the first product should be "Sauce Labs Backpack"
|
|
198
|
+
- When the user selects "Name (A to Z)" from the sort dropdown
|
|
199
|
+
- Then products should be sorted alphabetically by name in ascending order
|
|
200
|
+
- And the first product should be "Sauce Labs Backpack"
|
|
201
201
|
|
|
202
|
-
When the user selects "Name (Z to A)" from the sort dropdown
|
|
203
|
-
Then products should be sorted alphabetically by name in descending order
|
|
204
|
-
And the first product should be "Test.allTheThings() T-Shirt (Red)"
|
|
202
|
+
- When the user selects "Name (Z to A)" from the sort dropdown
|
|
203
|
+
- Then products should be sorted alphabetically by name in descending order
|
|
204
|
+
- And the first product should be "Test.allTheThings() T-Shirt (Red)"
|
|
205
205
|
|
|
206
|
-
When the user selects "Price (low to high)" from the sort dropdown
|
|
207
|
-
Then products should be sorted by price in ascending order
|
|
208
|
-
And the first product should be the cheapest item
|
|
206
|
+
- When the user selects "Price (low to high)" from the sort dropdown
|
|
207
|
+
- Then products should be sorted by price in ascending order
|
|
208
|
+
- And the first product should be the cheapest item
|
|
209
209
|
|
|
210
|
-
When the user selects "Price (high to low)" from the sort dropdown
|
|
211
|
-
Then products should be sorted by price in descending order
|
|
212
|
-
And the first product should be the most expensive item
|
|
210
|
+
- When the user selects "Price (high to low)" from the sort dropdown
|
|
211
|
+
- Then products should be sorted by price in descending order
|
|
212
|
+
- And the first product should be the most expensive item
|
|
213
213
|
|
|
214
|
-
When the user clicks "Add to Cart" on the first product in the sorted list
|
|
215
|
-
Then the cart icon should update to show "1"
|
|
216
|
-
And that product's button should show "Remove"
|
|
214
|
+
- When the user clicks "Add to Cart" on the first product in the sorted list
|
|
215
|
+
- Then the cart icon should update to show "1"
|
|
216
|
+
- And that product's button should show "Remove"
|
|
217
217
|
|
|
218
|
-
When the user clicks "Add to Cart" on the second product in the sorted list
|
|
219
|
-
Then the cart icon should update to show "2"
|
|
220
|
-
And both products' buttons should show "Remove"
|
|
218
|
+
- When the user clicks "Add to Cart" on the second product in the sorted list
|
|
219
|
+
- Then the cart icon should update to show "2"
|
|
220
|
+
- And both products' buttons should show "Remove"
|
|
221
221
|
|
|
222
|
-
When the user clicks the cart icon
|
|
223
|
-
Then the cart page should open
|
|
224
|
-
And both selected products should be listed
|
|
225
|
-
And the quantities should be 1 for each
|
|
226
|
-
And the total price should be the sum of both items
|
|
222
|
+
- When the user clicks the cart icon
|
|
223
|
+
- Then the cart page should open
|
|
224
|
+
- And both selected products should be listed
|
|
225
|
+
- And the quantities should be 1 for each
|
|
226
|
+
- And the total price should be the sum of both items
|
|
227
227
|
|
|
228
|
-
When the user clicks "Remove" next to the first product
|
|
229
|
-
Then that product should be removed from the cart
|
|
230
|
-
And the cart should show only the second product
|
|
231
|
-
And the cart icon should show "1"
|
|
228
|
+
- When the user clicks "Remove" next to the first product
|
|
229
|
+
- Then that product should be removed from the cart
|
|
230
|
+
- And the cart should show only the second product
|
|
231
|
+
- And the cart icon should show "1"
|
|
232
232
|
|
|
233
|
-
When the user clicks "Continue Shopping"
|
|
234
|
-
Then the user should return to the products page
|
|
235
|
-
And the cart icon should still show "1"
|
|
233
|
+
- When the user clicks "Continue Shopping"
|
|
234
|
+
- Then the user should return to the products page
|
|
235
|
+
- And the cart icon should still show "1"
|
|
236
236
|
|
|
237
|
-
When the user clicks the cart icon again
|
|
238
|
-
Then the cart should still contain the remaining product
|
|
239
|
-
And the user can proceed with checkout if desired
|
|
237
|
+
- When the user clicks the cart icon again
|
|
238
|
+
- Then the cart should still contain the remaining product
|
|
239
|
+
- And the user can proceed with checkout if desired
|
|
240
240
|
`;
|
|
241
241
|
await fs_extra_1.default.writeFile(path_1.default.join(projectRoot, "tests", "saucedemo-samples.test.md"), saucedemoSampleContent);
|
|
242
242
|
console.log(chalk_1.default.green("✓ Created SauceDemo sample test cases"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;AAIA,8CA8UC;AAlVD,gDAAwB;AACxB,wDAA0B;AAC1B,kDAA0B;AAEnB,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,MAAM,WAAW,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,sDAAsD,WAAW,KAAK,CACvE,CACF,CAAC;QAEF,6BAA6B;QAC7B,MAAM,WAAW,GAAG;YAClB,OAAO;YACP,WAAW;YACX,cAAc;YACd,OAAO;YACP,mBAAmB;YACnB,mBAAmB;SACpB,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,kBAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,+BAA+B;QAC/B,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface Config {
|
|
2
|
-
aiModel: "claude" | "azure-openai" | "chatgpt";
|
|
2
|
+
aiModel: "claude" | "azure-openai" | "chatgpt" | "local";
|
|
3
3
|
claudeApiKey?: string;
|
|
4
4
|
azureOpenAIApiKey?: string;
|
|
5
5
|
azureOpenAIEndpoint?: string;
|
|
@@ -7,6 +7,8 @@ export interface Config {
|
|
|
7
7
|
azureOpenAIApiVersion?: string;
|
|
8
8
|
chatGPTApiKey?: string;
|
|
9
9
|
chatGPTModel?: string;
|
|
10
|
+
localLLMUrl?: string;
|
|
11
|
+
localLLMModel?: string;
|
|
10
12
|
browser: "chromium" | "firefox" | "webkit";
|
|
11
13
|
headless: boolean;
|
|
12
14
|
baseUrl: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,OAAO,CAAC,UAAU;IAsBlB,SAAS,IAAI,MAAM;IAInB,cAAc,IAAI,OAAO;IAkBzB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI3C,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAG5C;;AAED,wBAA2C"}
|
package/dist/config.js
CHANGED
|
@@ -29,6 +29,8 @@ class ConfigManager {
|
|
|
29
29
|
azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION || "2024-02-01",
|
|
30
30
|
chatGPTApiKey: process.env.CHATGPT_API_KEY,
|
|
31
31
|
chatGPTModel: process.env.CHATGPT_MODEL || "gpt-4o",
|
|
32
|
+
localLLMUrl: process.env.LOCAL_LLM_URL || "http://localhost:11434",
|
|
33
|
+
localLLMModel: process.env.LOCAL_LLM_MODEL || "llama3",
|
|
32
34
|
browser: process.env.BROWSER ||
|
|
33
35
|
"chromium",
|
|
34
36
|
headless: process.env.HEADLESS !== "false",
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AACxB,4CAAoB;AAEpB,6BAA6B;AAC7B,gBAAM,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AACxB,4CAAoB;AAEpB,6BAA6B;AAC7B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAoBhB,MAAa,aAAa;IAIxB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEO,UAAU;QAChB,OAAO;YACL,OAAO,EAAG,OAAO,CAAC,GAAG,CAAC,QAA4D,IAAI,QAAQ;YAC9F,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YACxC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACnD,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;YACtD,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB;YAC1D,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,YAAY;YAC3E,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YAC1C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ;YACnD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,wBAAwB;YAClE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,QAAQ;YACtD,OAAO,EACJ,OAAO,CAAC,GAAG,CAAC,OAA6C;gBAC1D,UAAU;YACZ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO;YAC1C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,uBAAuB;YACxD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,CAAC;YACrD,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,cAAc;QACZ,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE7G,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,IAAI,CAAC,mBAAmB,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACzE,MAAM,IAAI,KAAK,CAAC,8GAA8G,CAAC,CAAC;YAClI,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,OAAO,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,aAAa,CAAC,WAAmB;QAC/B,OAAO,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAlED,sCAkEC;AAED,kBAAe,aAAa,CAAC,WAAW,EAAE,CAAC"}
|
package/dist/llm/chatgpt.js
CHANGED
|
@@ -17,7 +17,7 @@ class ChatGPTProvider extends provider_1.LLMProvider {
|
|
|
17
17
|
}
|
|
18
18
|
async validateConnection() {
|
|
19
19
|
try {
|
|
20
|
-
const response = await axios_1.default.post(this.baseUrl, { model: this.model, messages: [{ role: "user", content: "test" }],
|
|
20
|
+
const response = await axios_1.default.post(this.baseUrl, { model: this.model, messages: [{ role: "user", content: "test" }], max_completion_tokens: 10 }, { headers: { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" }, timeout: 5000 });
|
|
21
21
|
return response.status === 200;
|
|
22
22
|
}
|
|
23
23
|
catch (error) {
|
|
@@ -30,7 +30,7 @@ class ChatGPTProvider extends provider_1.LLMProvider {
|
|
|
30
30
|
const response = await axios_1.default.post(this.baseUrl, {
|
|
31
31
|
model: this.model,
|
|
32
32
|
messages: [{ role: "user", content: this.buildPrompt(prompt) }],
|
|
33
|
-
|
|
33
|
+
max_completion_tokens: 2000,
|
|
34
34
|
temperature: 0.2,
|
|
35
35
|
}, {
|
|
36
36
|
headers: { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" },
|
package/dist/llm/chatgpt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/llm/chatgpt.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yCAAmE;AAEnE,MAAa,eAAgB,SAAQ,sBAAW;IAK9C,YAAY,MAAc,EAAE,KAAK,GAAG,QAAQ;QAC1C,KAAK,EAAE,CAAC;QAHF,YAAO,GAAG,4CAA4C,CAAC;QAI7D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,EACZ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/llm/chatgpt.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yCAAmE;AAEnE,MAAa,eAAgB,SAAQ,sBAAW;IAK9C,YAAY,MAAc,EAAE,KAAK,GAAG,QAAQ;QAC1C,KAAK,EAAE,CAAC;QAHF,YAAO,GAAG,4CAA4C,CAAC;QAI7D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,EACZ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAC/F,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAC3G,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAiB;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,IAAI,CAAC,OAAO,EACZ;gBACE,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,qBAAqB,EAAE,IAAI;gBAC3B,WAAW,EAAE,GAAG;aACjB,EACD;gBACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBACvF,OAAO,EAAE,KAAK;aACf,CACF,CAAC;YAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAE1E,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,SAAS;gBAChB,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ;gBACjC,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAChG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF;AA1DD,0CA0DC"}
|
package/dist/llm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOzC,qBAAa,UAAU;IACrB,MAAM,CAAC,cAAc,IAAI,WAAW;CAsBrC;AAED,eAAe,UAAU,CAAC"}
|
package/dist/llm/index.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.LLMFactory = void 0;
|
|
|
7
7
|
const claude_1 = require("./claude");
|
|
8
8
|
const azure_openai_1 = require("./azure-openai");
|
|
9
9
|
const chatgpt_1 = require("./chatgpt");
|
|
10
|
+
const local_1 = require("./local");
|
|
10
11
|
const config_1 = __importDefault(require("../config"));
|
|
11
12
|
class LLMFactory {
|
|
12
13
|
static createProvider() {
|
|
@@ -20,6 +21,9 @@ class LLMFactory {
|
|
|
20
21
|
throw new Error("Azure OpenAI deployment not configured. Set AZURE_OPENAI_DEPLOYMENT in .env");
|
|
21
22
|
return new azure_openai_1.AzureOpenAIProvider(config.azureOpenAIApiKey, config.azureOpenAIEndpoint, config.azureOpenAIDeployment, config.azureOpenAIApiVersion);
|
|
22
23
|
}
|
|
24
|
+
if (config.aiModel === "local") {
|
|
25
|
+
return new local_1.LocalLLMProvider(config.localLLMUrl, config.localLLMModel);
|
|
26
|
+
}
|
|
23
27
|
if (config.aiModel === "chatgpt") {
|
|
24
28
|
if (!config.chatGPTApiKey)
|
|
25
29
|
throw new Error("ChatGPT API key not configured. Set CHATGPT_API_KEY in .env");
|
package/dist/llm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":";;;;;;AACA,qCAA0C;AAC1C,iDAAqD;AACrD,uCAA4C;AAC5C,uDAAsC;AAEtC,MAAa,UAAU;IACrB,MAAM,CAAC,cAAc;QACnB,MAAM,MAAM,GAAG,gBAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACxH,IAAI,CAAC,MAAM,CAAC,mBAAmB;gBAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC5H,IAAI,CAAC,MAAM,CAAC,qBAAqB;gBAAE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAClI,OAAO,IAAI,kCAAmB,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACnJ,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC1G,OAAO,IAAI,yBAAe,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACvG,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":";;;;;;AACA,qCAA0C;AAC1C,iDAAqD;AACrD,uCAA4C;AAC5C,mCAA2C;AAC3C,uDAAsC;AAEtC,MAAa,UAAU;IACrB,MAAM,CAAC,cAAc;QACnB,MAAM,MAAM,GAAG,gBAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,iBAAiB;gBAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACxH,IAAI,CAAC,MAAM,CAAC,mBAAmB;gBAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC5H,IAAI,CAAC,MAAM,CAAC,qBAAqB;gBAAE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAClI,OAAO,IAAI,kCAAmB,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACnJ,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,IAAI,wBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC1G,OAAO,IAAI,yBAAe,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACvG,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;CACF;AAvBD,gCAuBC;AAED,kBAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LLMProvider, LLMPrompt, GeneratedCode } from "./provider";
|
|
2
|
+
export declare class LocalLLMProvider extends LLMProvider {
|
|
3
|
+
private baseUrl;
|
|
4
|
+
private model;
|
|
5
|
+
constructor(baseUrl?: string, model?: string);
|
|
6
|
+
validateConnection(): Promise<boolean>;
|
|
7
|
+
generateTestCode(prompt: LLMPrompt): Promise<GeneratedCode>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/llm/local.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,SAA2B,EAAE,KAAK,SAAW;IAM1D,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IActC,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;CAgClE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LocalLLMProvider = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const provider_1 = require("./provider");
|
|
9
|
+
class LocalLLMProvider extends provider_1.LLMProvider {
|
|
10
|
+
constructor(baseUrl = "http://localhost:11434", model = "llama3") {
|
|
11
|
+
super();
|
|
12
|
+
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
13
|
+
this.model = model;
|
|
14
|
+
}
|
|
15
|
+
async validateConnection() {
|
|
16
|
+
try {
|
|
17
|
+
const response = await axios_1.default.post(`${this.baseUrl}/v1/chat/completions`, { model: this.model, messages: [{ role: "user", content: "test" }], max_tokens: 10 }, { headers: { "Content-Type": "application/json" }, timeout: 5000 });
|
|
18
|
+
return response.status === 200;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error("Local LLM connection validation failed:", error.response?.data || error.message);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async generateTestCode(prompt) {
|
|
26
|
+
try {
|
|
27
|
+
const response = await axios_1.default.post(`${this.baseUrl}/v1/chat/completions`, {
|
|
28
|
+
model: this.model,
|
|
29
|
+
messages: [{ role: "user", content: this.buildPrompt(prompt) }],
|
|
30
|
+
temperature: 0.2,
|
|
31
|
+
stream: false,
|
|
32
|
+
}, {
|
|
33
|
+
headers: { "Content-Type": "application/json" },
|
|
34
|
+
timeout: 120000,
|
|
35
|
+
});
|
|
36
|
+
const generatedCode = response.data.choices?.[0]?.message?.content || "";
|
|
37
|
+
if (!generatedCode.trim())
|
|
38
|
+
throw new Error("Empty response from local LLM");
|
|
39
|
+
return {
|
|
40
|
+
code: generatedCode,
|
|
41
|
+
timestamp: new Date(),
|
|
42
|
+
model: `local/${this.model}`,
|
|
43
|
+
testCaseId: prompt.testCaseId,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const errorMessage = error.response
|
|
48
|
+
? `HTTP ${error.response.status}: ${JSON.stringify(error.response.data)}`
|
|
49
|
+
: error.message;
|
|
50
|
+
throw new Error(`Failed to generate code with local LLM: ${errorMessage}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.LocalLLMProvider = LocalLLMProvider;
|
|
55
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/llm/local.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yCAAmE;AAEnE,MAAa,gBAAiB,SAAQ,sBAAW;IAI/C,YAAY,OAAO,GAAG,wBAAwB,EAAE,KAAK,GAAG,QAAQ;QAC9D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,OAAO,sBAAsB,EACrC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EACpF,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CACnE,CAAC;YACF,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAiB;QACtC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,OAAO,sBAAsB,EACrC;gBACE,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,WAAW,EAAE,GAAG;gBAChB,MAAM,EAAE,KAAK;aACd,EACD;gBACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,OAAO,EAAE,MAAM;aAChB,CACF,CAAC;YAEF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAE5E,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;gBAC5B,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ;gBACjC,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACzE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2CAA2C,YAAY,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF;AAxDD,4CAwDC"}
|