haiku.rag 0.12.0__py3-none-any.whl → 0.12.1__py3-none-any.whl
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.
Potentially problematic release.
This version of haiku.rag might be problematic. Click here for more details.
- haiku/rag/a2a/client.py +52 -55
- haiku/rag/app.py +12 -5
- haiku/rag/cli.py +2 -2
- haiku/rag/client.py +47 -4
- haiku/rag/embeddings/base.py +8 -0
- haiku/rag/embeddings/ollama.py +8 -0
- haiku/rag/embeddings/openai.py +8 -0
- haiku/rag/embeddings/vllm.py +8 -0
- haiku/rag/embeddings/voyageai.py +8 -0
- {haiku_rag-0.12.0.dist-info → haiku_rag-0.12.1.dist-info}/METADATA +4 -2
- {haiku_rag-0.12.0.dist-info → haiku_rag-0.12.1.dist-info}/RECORD +14 -14
- {haiku_rag-0.12.0.dist-info → haiku_rag-0.12.1.dist-info}/WHEEL +0 -0
- {haiku_rag-0.12.0.dist-info → haiku_rag-0.12.1.dist-info}/entry_points.txt +0 -0
- {haiku_rag-0.12.0.dist-info → haiku_rag-0.12.1.dist-info}/licenses/LICENSE +0 -0
haiku/rag/a2a/client.py
CHANGED
|
@@ -7,9 +7,18 @@ from rich.console import Console
|
|
|
7
7
|
from rich.markdown import Markdown
|
|
8
8
|
from rich.prompt import Prompt
|
|
9
9
|
|
|
10
|
+
try:
|
|
11
|
+
from fasta2a.client import A2AClient as FastA2AClient
|
|
12
|
+
from fasta2a.schema import Message, TextPart
|
|
13
|
+
except ImportError as e:
|
|
14
|
+
raise ImportError(
|
|
15
|
+
"A2A support requires the 'a2a' extra. "
|
|
16
|
+
"Install with: uv pip install 'haiku.rag[a2a]'"
|
|
17
|
+
) from e
|
|
18
|
+
|
|
10
19
|
|
|
11
20
|
class A2AClient:
|
|
12
|
-
"""
|
|
21
|
+
"""Interactive A2A protocol client."""
|
|
13
22
|
|
|
14
23
|
def __init__(self, base_url: str = "http://localhost:8000"):
|
|
15
24
|
"""Initialize A2A client.
|
|
@@ -18,11 +27,12 @@ class A2AClient:
|
|
|
18
27
|
base_url: Base URL of the A2A server
|
|
19
28
|
"""
|
|
20
29
|
self.base_url = base_url.rstrip("/")
|
|
21
|
-
|
|
30
|
+
http_client = httpx.AsyncClient(timeout=60.0)
|
|
31
|
+
self._client = FastA2AClient(base_url=base_url, http_client=http_client)
|
|
22
32
|
|
|
23
33
|
async def close(self):
|
|
24
34
|
"""Close the HTTP client."""
|
|
25
|
-
await self.
|
|
35
|
+
await self._client.http_client.aclose()
|
|
26
36
|
|
|
27
37
|
async def get_agent_card(self) -> dict[str, Any]:
|
|
28
38
|
"""Fetch the agent card from the A2A server.
|
|
@@ -30,7 +40,9 @@ class A2AClient:
|
|
|
30
40
|
Returns:
|
|
31
41
|
Agent card dictionary with agent capabilities and metadata
|
|
32
42
|
"""
|
|
33
|
-
response = await self.
|
|
43
|
+
response = await self._client.http_client.get(
|
|
44
|
+
f"{self.base_url}/.well-known/agent-card.json"
|
|
45
|
+
)
|
|
34
46
|
response.raise_for_status()
|
|
35
47
|
return response.json()
|
|
36
48
|
|
|
@@ -53,46 +65,38 @@ class A2AClient:
|
|
|
53
65
|
if context_id is None:
|
|
54
66
|
context_id = str(uuid.uuid4())
|
|
55
67
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
"contextId": context_id,
|
|
63
|
-
"message": {
|
|
64
|
-
"kind": "message",
|
|
65
|
-
"role": "user",
|
|
66
|
-
"messageId": message_id,
|
|
67
|
-
"parts": [{"kind": "text", "text": text}],
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
"id": 1,
|
|
71
|
-
}
|
|
68
|
+
message = Message(
|
|
69
|
+
kind="message",
|
|
70
|
+
role="user",
|
|
71
|
+
message_id=str(uuid.uuid4()),
|
|
72
|
+
parts=[TextPart(kind="text", text=text)],
|
|
73
|
+
)
|
|
72
74
|
|
|
75
|
+
metadata: dict[str, Any] = {"contextId": context_id}
|
|
73
76
|
if skill_id:
|
|
74
|
-
|
|
77
|
+
metadata["skillId"] = skill_id
|
|
75
78
|
|
|
76
|
-
response = await self.
|
|
77
|
-
self.base_url,
|
|
78
|
-
json=payload,
|
|
79
|
-
headers={"Content-Type": "application/json"},
|
|
80
|
-
)
|
|
81
|
-
response.raise_for_status()
|
|
82
|
-
initial_response = response.json()
|
|
79
|
+
response = await self._client.send_message(message, metadata=metadata)
|
|
83
80
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
task_id = result.get("id")
|
|
81
|
+
if "error" in response:
|
|
82
|
+
return {"error": response["error"]}
|
|
87
83
|
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
result = response.get("result")
|
|
85
|
+
if not result:
|
|
86
|
+
return {"result": result}
|
|
90
87
|
|
|
91
|
-
#
|
|
92
|
-
|
|
88
|
+
# Result can be either Task or Message - check if it's a Task with an id
|
|
89
|
+
if result.get("kind") == "task":
|
|
90
|
+
task_id = result.get("id")
|
|
91
|
+
if task_id:
|
|
92
|
+
# Poll for task completion
|
|
93
|
+
return await self.wait_for_task(task_id)
|
|
94
|
+
|
|
95
|
+
# Return the message directly
|
|
96
|
+
return {"result": result}
|
|
93
97
|
|
|
94
98
|
async def wait_for_task(
|
|
95
|
-
self, task_id: str, max_wait: int =
|
|
99
|
+
self, task_id: str, max_wait: int = 120, poll_interval: float = 0.5
|
|
96
100
|
) -> dict[str, Any]:
|
|
97
101
|
"""Poll for task completion.
|
|
98
102
|
|
|
@@ -109,27 +113,19 @@ class A2AClient:
|
|
|
109
113
|
start_time = time.time()
|
|
110
114
|
|
|
111
115
|
while time.time() - start_time < max_wait:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
headers={"Content-Type": "application/json"},
|
|
123
|
-
)
|
|
124
|
-
response.raise_for_status()
|
|
125
|
-
task = response.json()
|
|
126
|
-
|
|
127
|
-
result = task.get("result", {})
|
|
128
|
-
status = result.get("status", {})
|
|
129
|
-
state = status.get("state")
|
|
116
|
+
task_response = await self._client.get_task(task_id)
|
|
117
|
+
|
|
118
|
+
if "error" in task_response:
|
|
119
|
+
return {"error": task_response["error"]}
|
|
120
|
+
|
|
121
|
+
task = task_response.get("result")
|
|
122
|
+
if not task:
|
|
123
|
+
raise Exception("No task in response")
|
|
124
|
+
|
|
125
|
+
state = task.get("status", {}).get("state")
|
|
130
126
|
|
|
131
127
|
if state == "completed":
|
|
132
|
-
return task
|
|
128
|
+
return {"result": task}
|
|
133
129
|
elif state == "failed":
|
|
134
130
|
raise Exception(f"Task failed: {task}")
|
|
135
131
|
|
|
@@ -191,6 +187,7 @@ def print_response(response: dict[str, Any], console: Console):
|
|
|
191
187
|
|
|
192
188
|
# Print artifacts summary with details
|
|
193
189
|
if artifacts:
|
|
190
|
+
console.rule("[dim]Artifacts generated[/dim]")
|
|
194
191
|
summary_lines = []
|
|
195
192
|
|
|
196
193
|
for artifact in artifacts:
|
haiku/rag/app.py
CHANGED
|
@@ -160,13 +160,20 @@ class HaikuRAGApp:
|
|
|
160
160
|
self, source: str, title: str | None = None, metadata: dict | None = None
|
|
161
161
|
):
|
|
162
162
|
async with HaikuRAG(db_path=self.db_path) as self.client:
|
|
163
|
-
|
|
163
|
+
result = await self.client.create_document_from_source(
|
|
164
164
|
source, title=title, metadata=metadata
|
|
165
165
|
)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
166
|
+
if isinstance(result, list):
|
|
167
|
+
for doc in result:
|
|
168
|
+
self._rich_print_document(doc, truncate=True)
|
|
169
|
+
self.console.print(
|
|
170
|
+
f"[bold green]{len(result)} documents added successfully.[/bold green]"
|
|
171
|
+
)
|
|
172
|
+
else:
|
|
173
|
+
self._rich_print_document(result, truncate=True)
|
|
174
|
+
self.console.print(
|
|
175
|
+
f"[bold green]Document {result.id} added successfully.[/bold green]"
|
|
176
|
+
)
|
|
170
177
|
|
|
171
178
|
async def get_document(self, doc_id: str):
|
|
172
179
|
async with HaikuRAG(db_path=self.db_path) as self.client:
|
haiku/rag/cli.py
CHANGED
|
@@ -128,10 +128,10 @@ def add_document_text(
|
|
|
128
128
|
asyncio.run(app.add_document_from_text(text=text, metadata=metadata or None))
|
|
129
129
|
|
|
130
130
|
|
|
131
|
-
@cli.command("add-src", help="Add a document from a file path or URL")
|
|
131
|
+
@cli.command("add-src", help="Add a document from a file path, directory, or URL")
|
|
132
132
|
def add_document_src(
|
|
133
133
|
source: str = typer.Argument(
|
|
134
|
-
help="The file path or URL of the document to add",
|
|
134
|
+
help="The file path, directory, or URL of the document(s) to add",
|
|
135
135
|
),
|
|
136
136
|
title: str | None = typer.Option(
|
|
137
137
|
None,
|
haiku/rag/client.py
CHANGED
|
@@ -106,8 +106,8 @@ class HaikuRAG:
|
|
|
106
106
|
|
|
107
107
|
async def create_document_from_source(
|
|
108
108
|
self, source: str | Path, title: str | None = None, metadata: dict | None = None
|
|
109
|
-
) -> Document:
|
|
110
|
-
"""Create or update
|
|
109
|
+
) -> Document | list[Document]:
|
|
110
|
+
"""Create or update document(s) from a file path, directory, or URL.
|
|
111
111
|
|
|
112
112
|
Checks if a document with the same URI already exists:
|
|
113
113
|
- If MD5 is unchanged, returns existing document
|
|
@@ -115,11 +115,13 @@ class HaikuRAG:
|
|
|
115
115
|
- If no document exists, creates a new one
|
|
116
116
|
|
|
117
117
|
Args:
|
|
118
|
-
source: File path (as string or Path) or URL to parse
|
|
118
|
+
source: File path, directory (as string or Path), or URL to parse
|
|
119
|
+
title: Optional title (only used for single files, not directories)
|
|
119
120
|
metadata: Optional metadata dictionary
|
|
120
121
|
|
|
121
122
|
Returns:
|
|
122
|
-
Document instance (created, updated, or existing)
|
|
123
|
+
Document instance (created, updated, or existing) for single files/URLs
|
|
124
|
+
List of Document instances for directories
|
|
123
125
|
|
|
124
126
|
Raises:
|
|
125
127
|
ValueError: If the file/URL cannot be parsed or doesn't exist
|
|
@@ -142,6 +144,45 @@ class HaikuRAG:
|
|
|
142
144
|
else:
|
|
143
145
|
# Handle as regular file path
|
|
144
146
|
source_path = Path(source) if isinstance(source, str) else source
|
|
147
|
+
|
|
148
|
+
# Handle directories
|
|
149
|
+
if source_path.is_dir():
|
|
150
|
+
documents = []
|
|
151
|
+
supported_extensions = set(FileReader.extensions)
|
|
152
|
+
for file_path in source_path.rglob("*"):
|
|
153
|
+
if (
|
|
154
|
+
file_path.is_file()
|
|
155
|
+
and file_path.suffix.lower() in supported_extensions
|
|
156
|
+
):
|
|
157
|
+
doc = await self._create_document_from_file(
|
|
158
|
+
file_path, title=None, metadata=metadata
|
|
159
|
+
)
|
|
160
|
+
documents.append(doc)
|
|
161
|
+
return documents
|
|
162
|
+
|
|
163
|
+
# Handle single file
|
|
164
|
+
return await self._create_document_from_file(
|
|
165
|
+
source_path, title=title, metadata=metadata
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
async def _create_document_from_file(
|
|
169
|
+
self, source_path: Path, title: str | None = None, metadata: dict | None = None
|
|
170
|
+
) -> Document:
|
|
171
|
+
"""Create or update a document from a single file path.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
source_path: Path to the file
|
|
175
|
+
title: Optional title
|
|
176
|
+
metadata: Optional metadata dictionary
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
Document instance (created, updated, or existing)
|
|
180
|
+
|
|
181
|
+
Raises:
|
|
182
|
+
ValueError: If the file cannot be parsed or doesn't exist
|
|
183
|
+
"""
|
|
184
|
+
metadata = metadata or {}
|
|
185
|
+
|
|
145
186
|
if source_path.suffix.lower() not in FileReader.extensions:
|
|
146
187
|
raise ValueError(f"Unsupported file extension: {source_path.suffix}")
|
|
147
188
|
|
|
@@ -592,6 +633,8 @@ class HaikuRAG:
|
|
|
592
633
|
new_doc = await self.create_document_from_source(
|
|
593
634
|
source=doc.uri, metadata=doc.metadata or {}
|
|
594
635
|
)
|
|
636
|
+
# URIs always point to single files/URLs, never directories
|
|
637
|
+
assert isinstance(new_doc, Document)
|
|
595
638
|
assert new_doc.id is not None, (
|
|
596
639
|
"New document ID should not be None"
|
|
597
640
|
)
|
haiku/rag/embeddings/base.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import overload
|
|
2
|
+
|
|
1
3
|
from haiku.rag.config import Config
|
|
2
4
|
|
|
3
5
|
|
|
@@ -9,6 +11,12 @@ class EmbedderBase:
|
|
|
9
11
|
self._model = model
|
|
10
12
|
self._vector_dim = vector_dim
|
|
11
13
|
|
|
14
|
+
@overload
|
|
15
|
+
async def embed(self, text: str) -> list[float]: ...
|
|
16
|
+
|
|
17
|
+
@overload
|
|
18
|
+
async def embed(self, text: list[str]) -> list[list[float]]: ...
|
|
19
|
+
|
|
12
20
|
async def embed(self, text: str | list[str]) -> list[float] | list[list[float]]:
|
|
13
21
|
raise NotImplementedError(
|
|
14
22
|
"Embedder is an abstract class. Please implement the embed method in a subclass."
|
haiku/rag/embeddings/ollama.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import overload
|
|
2
|
+
|
|
1
3
|
from openai import AsyncOpenAI
|
|
2
4
|
|
|
3
5
|
from haiku.rag.config import Config
|
|
@@ -5,6 +7,12 @@ from haiku.rag.embeddings.base import EmbedderBase
|
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
class Embedder(EmbedderBase):
|
|
10
|
+
@overload
|
|
11
|
+
async def embed(self, text: str) -> list[float]: ...
|
|
12
|
+
|
|
13
|
+
@overload
|
|
14
|
+
async def embed(self, text: list[str]) -> list[list[float]]: ...
|
|
15
|
+
|
|
8
16
|
async def embed(self, text: str | list[str]) -> list[float] | list[list[float]]:
|
|
9
17
|
client = AsyncOpenAI(base_url=f"{Config.OLLAMA_BASE_URL}/v1", api_key="dummy")
|
|
10
18
|
if not text:
|
haiku/rag/embeddings/openai.py
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
from typing import overload
|
|
2
|
+
|
|
1
3
|
from openai import AsyncOpenAI
|
|
2
4
|
|
|
3
5
|
from haiku.rag.embeddings.base import EmbedderBase
|
|
4
6
|
|
|
5
7
|
|
|
6
8
|
class Embedder(EmbedderBase):
|
|
9
|
+
@overload
|
|
10
|
+
async def embed(self, text: str) -> list[float]: ...
|
|
11
|
+
|
|
12
|
+
@overload
|
|
13
|
+
async def embed(self, text: list[str]) -> list[list[float]]: ...
|
|
14
|
+
|
|
7
15
|
async def embed(self, text: str | list[str]) -> list[float] | list[list[float]]:
|
|
8
16
|
client = AsyncOpenAI()
|
|
9
17
|
if not text:
|
haiku/rag/embeddings/vllm.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from typing import overload
|
|
2
|
+
|
|
1
3
|
from openai import AsyncOpenAI
|
|
2
4
|
|
|
3
5
|
from haiku.rag.config import Config
|
|
@@ -5,6 +7,12 @@ from haiku.rag.embeddings.base import EmbedderBase
|
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
class Embedder(EmbedderBase):
|
|
10
|
+
@overload
|
|
11
|
+
async def embed(self, text: str) -> list[float]: ...
|
|
12
|
+
|
|
13
|
+
@overload
|
|
14
|
+
async def embed(self, text: list[str]) -> list[list[float]]: ...
|
|
15
|
+
|
|
8
16
|
async def embed(self, text: str | list[str]) -> list[float] | list[list[float]]:
|
|
9
17
|
client = AsyncOpenAI(
|
|
10
18
|
base_url=f"{Config.VLLM_EMBEDDINGS_BASE_URL}/v1", api_key="dummy"
|
haiku/rag/embeddings/voyageai.py
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
try:
|
|
2
|
+
from typing import overload
|
|
3
|
+
|
|
2
4
|
from voyageai.client import Client # type: ignore
|
|
3
5
|
|
|
4
6
|
from haiku.rag.embeddings.base import EmbedderBase
|
|
5
7
|
|
|
6
8
|
class Embedder(EmbedderBase):
|
|
9
|
+
@overload
|
|
10
|
+
async def embed(self, text: str) -> list[float]: ...
|
|
11
|
+
|
|
12
|
+
@overload
|
|
13
|
+
async def embed(self, text: list[str]) -> list[list[float]]: ...
|
|
14
|
+
|
|
7
15
|
async def embed(self, text: str | list[str]) -> list[float] | list[list[float]]:
|
|
8
16
|
client = Client()
|
|
9
17
|
if not text:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: haiku.rag
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.1
|
|
4
4
|
Summary: Agentic Retrieval Augmented Generation (RAG) with LanceDB
|
|
5
5
|
Author-email: Yiorgis Gozadinos <ggozadinos@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -24,7 +24,7 @@ Requires-Dist: httpx>=0.28.1
|
|
|
24
24
|
Requires-Dist: lancedb>=0.25.2
|
|
25
25
|
Requires-Dist: pydantic-ai>=1.0.18
|
|
26
26
|
Requires-Dist: pydantic-graph>=1.0.18
|
|
27
|
-
Requires-Dist: pydantic>=2.12.
|
|
27
|
+
Requires-Dist: pydantic>=2.12.2
|
|
28
28
|
Requires-Dist: python-dotenv>=1.1.1
|
|
29
29
|
Requires-Dist: rich>=14.2.0
|
|
30
30
|
Requires-Dist: tiktoken>=0.12.0
|
|
@@ -211,4 +211,6 @@ Full documentation at: https://ggozad.github.io/haiku.rag/
|
|
|
211
211
|
- [CLI](https://ggozad.github.io/haiku.rag/cli/) - Command reference
|
|
212
212
|
- [Python API](https://ggozad.github.io/haiku.rag/python/) - Complete API docs
|
|
213
213
|
- [Agents](https://ggozad.github.io/haiku.rag/agents/) - QA agent and multi-agent research
|
|
214
|
+
- [MCP Server](https://ggozad.github.io/haiku.rag/mcp/) - Model Context Protocol integration
|
|
215
|
+
- [A2A Agent](https://ggozad.github.io/haiku.rag/a2a/) - Agent-to-Agent protocol support
|
|
214
216
|
- [Benchmarks](https://ggozad.github.io/haiku.rag/benchmarks/) - Performance Benchmarks
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
haiku/rag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
haiku/rag/app.py,sha256=
|
|
2
|
+
haiku/rag/app.py,sha256=nrfg3iGWP_HJBfwUFPv60_1Do8YK3WQYWZhq22r001s,21548
|
|
3
3
|
haiku/rag/chunker.py,sha256=PVe6ysv8UlacUd4Zb3_8RFWIaWDXnzBAy2VDJ4TaUsE,1555
|
|
4
|
-
haiku/rag/cli.py,sha256=
|
|
5
|
-
haiku/rag/client.py,sha256=
|
|
4
|
+
haiku/rag/cli.py,sha256=ghmfvCmoitgySZsF6t5UQjsm3_rul0KUh0L774BzeuI,13196
|
|
5
|
+
haiku/rag/client.py,sha256=GVXHq9weIaFdcZvO9a4YO1WnrroJJUXVVriDGdMxpH4,25855
|
|
6
6
|
haiku/rag/config.py,sha256=FBsMMijl5PxIfPGifk_AJVRjL4omb03jfoZm0P_VqxI,2743
|
|
7
7
|
haiku/rag/logging.py,sha256=dm65AwADpcQsH5OAPtRA-4hsw0w5DK-sGOvzYkj6jzw,1720
|
|
8
8
|
haiku/rag/mcp.py,sha256=DZk-IJgVjAesu-vvqVd5BYnfDWKWNR6TQugKgdoFrvg,8976
|
|
@@ -11,7 +11,7 @@ haiku/rag/monitor.py,sha256=VP3bqY0mEodOP60eN4RMldgrL1ti5gMjuDuQ-_vBvFc,2759
|
|
|
11
11
|
haiku/rag/reader.py,sha256=aW8LG0X31kVWS7kU2tKVpe8RqP3Ne_oIidd_X3UDLH0,3307
|
|
12
12
|
haiku/rag/utils.py,sha256=dBzhKaOHI9KRiJqHErcXUnqtnXY2AgOK8PCLA3rhO0A,6115
|
|
13
13
|
haiku/rag/a2a/__init__.py,sha256=4SlJBr9GUVZ0879o5VI6-qpcBKpieP2hW4hmNbm8NGg,5933
|
|
14
|
-
haiku/rag/a2a/client.py,sha256=
|
|
14
|
+
haiku/rag/a2a/client.py,sha256=awuiHXgVHn1uzaEXE98RIqqKHj1JjszOvn9WI3Jtth8,8760
|
|
15
15
|
haiku/rag/a2a/context.py,sha256=SofkFUZcGonoJcgZh-RGqHTh0UWT4J7Zl4Mz6WDkMl4,2053
|
|
16
16
|
haiku/rag/a2a/models.py,sha256=XhGYj2g3rgVM4JoCDXlll0YjaysqdalybJrBqFXSwl4,689
|
|
17
17
|
haiku/rag/a2a/prompts.py,sha256=yCla8x0hbOhKrkuaqVrF1upn-YjQM3-2NsE2TSnet0M,3030
|
|
@@ -19,11 +19,11 @@ haiku/rag/a2a/skills.py,sha256=dwyD2Bn493eL3Vf4uQzmyxj_9IUSb66kQ-085FBAuCs,2701
|
|
|
19
19
|
haiku/rag/a2a/storage.py,sha256=c8vmGCiZ3nuV9wUuTnwpoRD2HVVvK2JPySQOc5PVMvg,2759
|
|
20
20
|
haiku/rag/a2a/worker.py,sha256=S9hiA1ncpJPdtN0eEmMjsvr5LQ4wMVN5R8CjYkTeohU,12367
|
|
21
21
|
haiku/rag/embeddings/__init__.py,sha256=44IfDITGIFTflGT6UEmiYOwpWFVbYv5smLY59D0YeCs,1419
|
|
22
|
-
haiku/rag/embeddings/base.py,sha256=
|
|
23
|
-
haiku/rag/embeddings/ollama.py,sha256=
|
|
24
|
-
haiku/rag/embeddings/openai.py,sha256=
|
|
25
|
-
haiku/rag/embeddings/vllm.py,sha256=
|
|
26
|
-
haiku/rag/embeddings/voyageai.py,sha256=
|
|
22
|
+
haiku/rag/embeddings/base.py,sha256=Aw4kjfVn2can0R17pdiAgpPRyk5BpdBgMXuor5mstDY,682
|
|
23
|
+
haiku/rag/embeddings/ollama.py,sha256=KXq-eJ58co5rwYchIO3kpvIv0OBwMJkwMXq1xDsETz0,823
|
|
24
|
+
haiku/rag/embeddings/openai.py,sha256=BfmPni567DH8KqwLCPiOmr3q-dpzpOJkvFFoUuTR5as,731
|
|
25
|
+
haiku/rag/embeddings/vllm.py,sha256=wgul0nMWTn6Q1aKA4DJe03EktsRoBxEgtB7gfpWVOyQ,854
|
|
26
|
+
haiku/rag/embeddings/voyageai.py,sha256=6vEuk6q510AJv-K2lL93P2dVrziAjELTOe_w_Zp5YT4,917
|
|
27
27
|
haiku/rag/graph/__init__.py,sha256=BHfMchuUO_UhHKpjjGHjd6xPxNkrIwJzHn4YJiLqG1g,62
|
|
28
28
|
haiku/rag/graph/base.py,sha256=DepZqLF9E64YCCkjmbqmgyp28oNp69WfJCXp614xzh0,819
|
|
29
29
|
haiku/rag/graph/common.py,sha256=xTejucXei3x9tqbal3ZS_64lZAC6Bw3-QfXPniZcZEw,986
|
|
@@ -69,8 +69,8 @@ haiku/rag/store/repositories/settings.py,sha256=ObrDrzxHn-yA1WcbgIoJoVmAbVvQHAFv
|
|
|
69
69
|
haiku/rag/store/upgrades/__init__.py,sha256=RQ8A6rEXBASLb5PD9vdDnEas_m_GgRzzdVu4B88Snqc,1975
|
|
70
70
|
haiku/rag/store/upgrades/v0_10_1.py,sha256=qNGnxj6hoHaHJ1rKTiALfw0c9NQOi0KAK-VZCD_073A,1959
|
|
71
71
|
haiku/rag/store/upgrades/v0_9_3.py,sha256=NrjNilQSgDtFWRbL3ZUtzQzJ8tf9u0dDRJtnDFwwbdw,3322
|
|
72
|
-
haiku_rag-0.12.
|
|
73
|
-
haiku_rag-0.12.
|
|
74
|
-
haiku_rag-0.12.
|
|
75
|
-
haiku_rag-0.12.
|
|
76
|
-
haiku_rag-0.12.
|
|
72
|
+
haiku_rag-0.12.1.dist-info/METADATA,sha256=POFHzbGYiVj7UkX_1VSA8zUByIiQEG1dPePWO55T7nU,7477
|
|
73
|
+
haiku_rag-0.12.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
74
|
+
haiku_rag-0.12.1.dist-info/entry_points.txt,sha256=G1U3nAkNd5YDYd4v0tuYFbriz0i-JheCsFuT9kIoGCI,48
|
|
75
|
+
haiku_rag-0.12.1.dist-info/licenses/LICENSE,sha256=eXZrWjSk9PwYFNK9yUczl3oPl95Z4V9UXH7bPN46iPo,1065
|
|
76
|
+
haiku_rag-0.12.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|