tea-rags 1.14.1 → 1.14.2

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.
@@ -1,5 +1,8 @@
1
1
  /**
2
2
  * Ollama embedding provider errors.
3
+ *
4
+ * Hints are platform-aware: macOS suggests Ollama.app (required for GPU),
5
+ * Linux/Windows suggest CLI commands.
3
6
  */
4
7
  import { EmbeddingError } from "../errors.js";
5
8
  export declare class OllamaUnavailableError extends EmbeddingError {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/core/adapters/embeddings/ollama/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,oGAAoG;IACpG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;gBAErB,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM;IAW/D,wEAAwE;IACxE,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,sBAAsB;CAcpG;AAWD,qBAAa,uBAAwB,SAAQ,cAAc;gBAC7C,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAQvC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/core/adapters/embeddings/ollama/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAiB9C,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,oGAAoG;IACpG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;gBAErB,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM;IAY/D,wEAAwE;IACxE,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,sBAAsB;CAqBpG;AA0BD,qBAAa,uBAAwB,SAAQ,cAAc;gBAC7C,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAQvC"}
@@ -1,15 +1,28 @@
1
1
  /**
2
2
  * Ollama embedding provider errors.
3
+ *
4
+ * Hints are platform-aware: macOS suggests Ollama.app (required for GPU),
5
+ * Linux/Windows suggest CLI commands.
3
6
  */
4
7
  import { EmbeddingError } from "../errors.js";
8
+ function getOllamaCommands() {
9
+ if (process.platform === "darwin") {
10
+ return { start: "open -a Ollama", stop: `osascript -e 'quit app "Ollama"'` };
11
+ }
12
+ if (process.platform === "win32") {
13
+ return { start: "ollama serve", stop: "taskkill /IM ollama.exe /F" };
14
+ }
15
+ return { start: "ollama serve", stop: "pkill ollama" };
16
+ }
5
17
  export class OllamaUnavailableError extends EmbeddingError {
6
18
  /** HTTP response status from Ollama API (e.g. 429 for rate limit). Undefined for network errors. */
7
19
  responseStatus;
8
20
  constructor(url, cause, responseStatus) {
21
+ const cmd = getOllamaCommands();
9
22
  super({
10
23
  code: "INFRA_OLLAMA_UNAVAILABLE",
11
24
  message: `Ollama is not reachable at ${url}`,
12
- hint: `Start Ollama: ollama serve, or verify OLLAMA_URL=${url}`,
25
+ hint: `Start Ollama: ${cmd.start}, or verify OLLAMA_URL=${url}`,
13
26
  httpStatus: 503,
14
27
  cause,
15
28
  });
@@ -18,9 +31,16 @@ export class OllamaUnavailableError extends EmbeddingError {
18
31
  /** Create error when both primary and fallback URLs are unreachable. */
19
32
  static withFallback(primaryUrl, fallbackUrl, cause) {
20
33
  const hasLocal = isLocalUrl(primaryUrl) || isLocalUrl(fallbackUrl);
21
- const hint = hasLocal
22
- ? `Start Ollama locally: ollama serve — or check connectivity to ${primaryUrl} and ${fallbackUrl}`
23
- : `Check network connectivity to ${primaryUrl} and ${fallbackUrl}`;
34
+ const cmd = getOllamaCommands();
35
+ let hint;
36
+ if (hasLocal) {
37
+ hint =
38
+ `Start Ollama: ${cmd.start} — or check connectivity to ${primaryUrl} and ${fallbackUrl}. ` +
39
+ `If Ollama is stuck: ${cmd.stop}`;
40
+ }
41
+ else {
42
+ hint = `Check network connectivity to ${primaryUrl} and ${fallbackUrl}`;
43
+ }
24
44
  const error = new OllamaUnavailableError(primaryUrl, cause);
25
45
  // Override message and hint via the base class fields
26
46
  Object.defineProperty(error, "message", {
@@ -33,7 +53,25 @@ export class OllamaUnavailableError extends EmbeddingError {
33
53
  function isLocalUrl(url) {
34
54
  try {
35
55
  const { hostname } = new URL(url);
36
- return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "192.168.1.1";
56
+ if (hostname === "localhost")
57
+ return true;
58
+ // Check numeric IP ranges
59
+ const parts = hostname.split(".").map(Number);
60
+ if (parts.length !== 4 || parts.some((p) => isNaN(p)))
61
+ return false;
62
+ // 127.0.0.0/8 — loopback
63
+ if (parts[0] === 127)
64
+ return true;
65
+ // 10.0.0.0/8 — private
66
+ if (parts[0] === 10)
67
+ return true;
68
+ // 172.16.0.0/12 — private (172.16.x.x – 172.31.x.x)
69
+ if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31)
70
+ return true;
71
+ // 192.168.0.0/16 — private
72
+ if (parts[0] === 192 && parts[1] === 168)
73
+ return true;
74
+ return false;
37
75
  }
38
76
  catch {
39
77
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/core/adapters/embeddings/ollama/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD,oGAAoG;IAC3F,cAAc,CAAU;IAEjC,YAAY,GAAW,EAAE,KAAa,EAAE,cAAuB;QAC7D,KAAK,CAAC;YACJ,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,8BAA8B,GAAG,EAAE;YAC5C,IAAI,EAAE,oDAAoD,GAAG,EAAE;YAC/D,UAAU,EAAE,GAAG;YACf,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,YAAY,CAAC,UAAkB,EAAE,WAAmB,EAAE,KAAa;QACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,QAAQ;YACnB,CAAC,CAAC,iEAAiE,UAAU,QAAQ,WAAW,EAAE;YAClG,CAAC,CAAC,iCAAiC,UAAU,QAAQ,WAAW,EAAE,CAAC;QAErE,MAAM,KAAK,GAAG,IAAI,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5D,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE;YACtC,KAAK,EAAE,8BAA8B,UAAU,iBAAiB,WAAW,aAAa;SACzF,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,aAAa,CAAC;IAC5F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,OAAO,uBAAwB,SAAQ,cAAc;IACzD,YAAY,KAAa,EAAE,GAAW;QACpC,KAAK,CAAC;YACJ,IAAI,EAAE,4BAA4B;YAClC,OAAO,EAAE,iBAAiB,KAAK,yBAAyB,GAAG,EAAE;YAC7D,IAAI,EAAE,+BAA+B,KAAK,EAAE;YAC5C,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/core/adapters/embeddings/ollama/errors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tea-rags",
3
- "version": "1.14.1",
3
+ "version": "1.14.2",
4
4
  "description": "MCP server for semantic search using local Qdrant and Ollama (default) with support for OpenAI, Cohere, and Voyage AI",
5
5
  "type": "module",
6
6
  "bin": {