kodit 0.3.11__py3-none-any.whl → 0.3.12__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 kodit might be problematic. Click here for more details.
- kodit/_version.py +2 -2
- kodit/app.py +1 -1
- kodit/{infrastructure/indexing → application/services}/auto_indexing_service.py +9 -1
- kodit/application/services/code_indexing_application_service.py +7 -0
- kodit/application/services/sync_scheduler.py +4 -1
- kodit/domain/services/index_query_service.py +5 -1
- kodit/domain/services/index_service.py +6 -0
- kodit/infrastructure/bm25/local_bm25_repository.py +4 -4
- kodit/infrastructure/bm25/vectorchord_bm25_repository.py +4 -1
- kodit/infrastructure/embedding/embedding_providers/local_embedding_provider.py +2 -9
- kodit/infrastructure/embedding/embedding_providers/openai_embedding_provider.py +4 -10
- kodit/infrastructure/ui/progress.py +43 -0
- kodit/utils/dump_openapi.py +4 -0
- {kodit-0.3.11.dist-info → kodit-0.3.12.dist-info}/METADATA +16 -1
- {kodit-0.3.11.dist-info → kodit-0.3.12.dist-info}/RECORD +18 -18
- {kodit-0.3.11.dist-info → kodit-0.3.12.dist-info}/WHEEL +0 -0
- {kodit-0.3.11.dist-info → kodit-0.3.12.dist-info}/entry_points.txt +0 -0
- {kodit-0.3.11.dist-info → kodit-0.3.12.dist-info}/licenses/LICENSE +0 -0
kodit/_version.py
CHANGED
kodit/app.py
CHANGED
|
@@ -8,11 +8,11 @@ from fastapi import FastAPI, Response
|
|
|
8
8
|
from fastapi.responses import RedirectResponse
|
|
9
9
|
|
|
10
10
|
from kodit._version import version
|
|
11
|
+
from kodit.application.services.auto_indexing_service import AutoIndexingService
|
|
11
12
|
from kodit.application.services.sync_scheduler import SyncSchedulerService
|
|
12
13
|
from kodit.config import AppContext
|
|
13
14
|
from kodit.infrastructure.api.v1.routers import indexes_router, search_router
|
|
14
15
|
from kodit.infrastructure.api.v1.schemas.context import AppLifespanState
|
|
15
|
-
from kodit.infrastructure.indexing.auto_indexing_service import AutoIndexingService
|
|
16
16
|
from kodit.mcp import mcp
|
|
17
17
|
from kodit.middleware import ASGICancelledErrorMiddleware, logging_middleware
|
|
18
18
|
|
|
@@ -11,6 +11,7 @@ from kodit.application.factories.code_indexing_factory import (
|
|
|
11
11
|
create_code_indexing_application_service,
|
|
12
12
|
)
|
|
13
13
|
from kodit.config import AppContext
|
|
14
|
+
from kodit.infrastructure.ui.progress import create_log_progress_callback
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class AutoIndexingService:
|
|
@@ -50,13 +51,20 @@ class AutoIndexingService:
|
|
|
50
51
|
|
|
51
52
|
for source in sources:
|
|
52
53
|
try:
|
|
54
|
+
# Only auto-index a source if it is new
|
|
55
|
+
if await service.does_index_exist(source):
|
|
56
|
+
self.log.info("Index already exists, skipping", source=source)
|
|
57
|
+
continue
|
|
58
|
+
|
|
53
59
|
self.log.info("Auto-indexing source", source=source)
|
|
54
60
|
|
|
55
61
|
# Create index
|
|
56
62
|
index = await service.create_index_from_uri(source)
|
|
57
63
|
|
|
58
64
|
# Run indexing (without progress callback for background mode)
|
|
59
|
-
await service.run_index(
|
|
65
|
+
await service.run_index(
|
|
66
|
+
index, progress_callback=create_log_progress_callback()
|
|
67
|
+
)
|
|
60
68
|
|
|
61
69
|
self.log.info("Successfully auto-indexed source", source=source)
|
|
62
70
|
|
|
@@ -53,6 +53,13 @@ class CodeIndexingApplicationService:
|
|
|
53
53
|
self.session = session
|
|
54
54
|
self.log = structlog.get_logger(__name__)
|
|
55
55
|
|
|
56
|
+
async def does_index_exist(self, uri: str) -> bool:
|
|
57
|
+
"""Check if an index exists for a source."""
|
|
58
|
+
# Check if index already exists
|
|
59
|
+
sanitized_uri, _ = self.index_domain_service.sanitize_uri(uri)
|
|
60
|
+
existing_index = await self.index_repository.get_by_uri(sanitized_uri)
|
|
61
|
+
return existing_index is not None
|
|
62
|
+
|
|
56
63
|
async def create_index_from_uri(
|
|
57
64
|
self, uri: str, progress_callback: ProgressCallback | None = None
|
|
58
65
|
) -> Index:
|
|
@@ -14,6 +14,7 @@ from kodit.config import AppContext
|
|
|
14
14
|
from kodit.domain.services.index_query_service import IndexQueryService
|
|
15
15
|
from kodit.infrastructure.indexing.fusion_service import ReciprocalRankFusionService
|
|
16
16
|
from kodit.infrastructure.sqlalchemy.index_repository import SqlAlchemyIndexRepository
|
|
17
|
+
from kodit.infrastructure.ui.progress import create_log_progress_callback
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class SyncSchedulerService:
|
|
@@ -102,7 +103,9 @@ class SyncSchedulerService:
|
|
|
102
103
|
source=str(index.source.working_copy.remote_uri),
|
|
103
104
|
)
|
|
104
105
|
|
|
105
|
-
await service.run_index(
|
|
106
|
+
await service.run_index(
|
|
107
|
+
index, progress_callback=create_log_progress_callback()
|
|
108
|
+
)
|
|
106
109
|
success_count += 1
|
|
107
110
|
|
|
108
111
|
self.log.info(
|
|
@@ -63,4 +63,8 @@ class IndexQueryService:
|
|
|
63
63
|
|
|
64
64
|
async def get_snippets_by_ids(self, ids: list[int]) -> list[SnippetWithContext]:
|
|
65
65
|
"""Get snippets by their IDs."""
|
|
66
|
-
|
|
66
|
+
snippets = await self.index_repository.get_snippets_by_ids(ids)
|
|
67
|
+
|
|
68
|
+
# Return snippets in the same order as the ids
|
|
69
|
+
snippets.sort(key=lambda x: ids.index(x.snippet.id or 0))
|
|
70
|
+
return snippets
|
|
@@ -13,6 +13,7 @@ from kodit.domain.services.enrichment_service import EnrichmentDomainService
|
|
|
13
13
|
from kodit.domain.value_objects import (
|
|
14
14
|
EnrichmentIndexRequest,
|
|
15
15
|
EnrichmentRequest,
|
|
16
|
+
FileProcessingStatus,
|
|
16
17
|
LanguageMapping,
|
|
17
18
|
)
|
|
18
19
|
from kodit.infrastructure.cloning.git.working_copy import GitWorkingCopyProvider
|
|
@@ -103,6 +104,11 @@ class IndexDomainService:
|
|
|
103
104
|
files = index.source.working_copy.changed_files()
|
|
104
105
|
index.delete_snippets_for_files(files)
|
|
105
106
|
|
|
107
|
+
# Filter out deleted files - they don't exist on disk anymore
|
|
108
|
+
files = [
|
|
109
|
+
f for f in files if f.file_processing_status != FileProcessingStatus.DELETED
|
|
110
|
+
]
|
|
111
|
+
|
|
106
112
|
# Create a set of languages to extract snippets for
|
|
107
113
|
extensions = {file.extension() for file in files}
|
|
108
114
|
lang_files_map: dict[str, list[domain_entities.File]] = defaultdict(list)
|
|
@@ -66,6 +66,7 @@ class LocalBM25Repository(BM25Repository):
|
|
|
66
66
|
stemmer=self.stemmer,
|
|
67
67
|
return_ids=False,
|
|
68
68
|
show_progress=True,
|
|
69
|
+
lower=True,
|
|
69
70
|
)
|
|
70
71
|
|
|
71
72
|
async def index_documents(self, request: IndexRequest) -> None:
|
|
@@ -78,9 +79,8 @@ class LocalBM25Repository(BM25Repository):
|
|
|
78
79
|
vocab = self._tokenize([doc.text for doc in request.documents])
|
|
79
80
|
self._retriever().index(vocab, show_progress=False)
|
|
80
81
|
self._retriever().save(self.index_path)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
]
|
|
82
|
+
# Replace snippet_ids instead of appending, since the BM25 index is rebuilt
|
|
83
|
+
self.snippet_ids = [doc.snippet_id for doc in request.documents]
|
|
84
84
|
async with aiofiles.open(self.index_path / SNIPPET_IDS_FILE, "w") as f:
|
|
85
85
|
await f.write(json.dumps(self.snippet_ids))
|
|
86
86
|
|
|
@@ -120,7 +120,7 @@ class LocalBM25Repository(BM25Repository):
|
|
|
120
120
|
|
|
121
121
|
# Filter results by snippet_ids if provided
|
|
122
122
|
filtered_results = []
|
|
123
|
-
for result, score in zip(results[0], scores[0], strict=
|
|
123
|
+
for result, score in zip(results[0], scores[0], strict=True):
|
|
124
124
|
snippet_id = int(result)
|
|
125
125
|
if score > 0.0 and (
|
|
126
126
|
request.snippet_ids is None or snippet_id in request.snippet_ids
|
|
@@ -70,6 +70,9 @@ UPDATE_QUERY = f"""
|
|
|
70
70
|
UPDATE {TABLE_NAME}
|
|
71
71
|
SET embedding = tokenize(passage, '{TOKENIZER_NAME}')
|
|
72
72
|
""" # noqa: S608
|
|
73
|
+
# https://github.com/tensorchord/VectorChord-bm25:
|
|
74
|
+
# We intentionally make it negative so that you can use the
|
|
75
|
+
# default order by to get the most relevant documents first.
|
|
73
76
|
SEARCH_QUERY = f"""
|
|
74
77
|
SELECT
|
|
75
78
|
snippet_id,
|
|
@@ -185,7 +188,7 @@ class VectorChordBM25Repository(BM25Repository):
|
|
|
185
188
|
|
|
186
189
|
async def search(self, request: SearchRequest) -> list[SearchResult]:
|
|
187
190
|
"""Search documents using BM25."""
|
|
188
|
-
if not request.query or request.query == "":
|
|
191
|
+
if not request.query or request.query.strip() == "":
|
|
189
192
|
return []
|
|
190
193
|
|
|
191
194
|
if request.snippet_ids is not None:
|
|
@@ -112,15 +112,8 @@ class LocalEmbeddingProvider(EmbeddingProvider):
|
|
|
112
112
|
|
|
113
113
|
except Exception as e:
|
|
114
114
|
self.log.exception("Error generating embeddings", error=str(e))
|
|
115
|
-
# Return
|
|
116
|
-
|
|
117
|
-
EmbeddingResponse(
|
|
118
|
-
snippet_id=item.snippet_id,
|
|
119
|
-
embedding=[0.0] * 1536, # Default embedding size
|
|
120
|
-
)
|
|
121
|
-
for item in batch
|
|
122
|
-
]
|
|
123
|
-
yield responses
|
|
115
|
+
# Return no embeddings for this batch if there was an error
|
|
116
|
+
yield []
|
|
124
117
|
|
|
125
118
|
def _split_sub_batches(
|
|
126
119
|
self, encoding: "Encoding", data: list[EmbeddingRequest]
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
from collections.abc import AsyncGenerator
|
|
5
|
-
from typing import Any
|
|
6
5
|
|
|
7
6
|
import structlog
|
|
8
7
|
import tiktoken
|
|
8
|
+
from openai import AsyncOpenAI
|
|
9
9
|
from tiktoken import Encoding
|
|
10
10
|
|
|
11
11
|
from kodit.domain.services.embedding_service import EmbeddingProvider
|
|
@@ -25,7 +25,7 @@ class OpenAIEmbeddingProvider(EmbeddingProvider):
|
|
|
25
25
|
"""OpenAI embedding provider that uses OpenAI's embedding API."""
|
|
26
26
|
|
|
27
27
|
def __init__(
|
|
28
|
-
self, openai_client:
|
|
28
|
+
self, openai_client: AsyncOpenAI, model_name: str = "text-embedding-3-small"
|
|
29
29
|
) -> None:
|
|
30
30
|
"""Initialize the OpenAI embedding provider.
|
|
31
31
|
|
|
@@ -99,14 +99,8 @@ class OpenAIEmbeddingProvider(EmbeddingProvider):
|
|
|
99
99
|
]
|
|
100
100
|
except Exception as e:
|
|
101
101
|
self.log.exception("Error embedding batch", error=str(e))
|
|
102
|
-
#
|
|
103
|
-
return [
|
|
104
|
-
EmbeddingResponse(
|
|
105
|
-
snippet_id=item.snippet_id,
|
|
106
|
-
embedding=[0.0] * 1536, # Default OpenAI dim
|
|
107
|
-
)
|
|
108
|
-
for item in batch
|
|
109
|
-
]
|
|
102
|
+
# Return no embeddings for this batch if there was an error
|
|
103
|
+
return []
|
|
110
104
|
|
|
111
105
|
tasks = [_process_batch(batch) for batch in batched_data]
|
|
112
106
|
for task in asyncio.as_completed(tasks):
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from collections.abc import Callable
|
|
4
4
|
|
|
5
|
+
import structlog
|
|
5
6
|
from tqdm import tqdm # type: ignore[import-untyped]
|
|
6
7
|
|
|
7
8
|
from kodit.domain.interfaces import ProgressCallback
|
|
@@ -42,6 +43,43 @@ class TQDMProgressCallback(ProgressCallback):
|
|
|
42
43
|
# TQDM will handle cleanup with leave=False
|
|
43
44
|
|
|
44
45
|
|
|
46
|
+
class LogProgressCallback(ProgressCallback):
|
|
47
|
+
"""Log-based progress callback for server environments."""
|
|
48
|
+
|
|
49
|
+
def __init__(self, milestone_interval: int = 10) -> None:
|
|
50
|
+
"""Initialize with milestone logging interval.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
milestone_interval: Percentage interval for logging (default: 10%)
|
|
54
|
+
|
|
55
|
+
"""
|
|
56
|
+
self.milestone_interval = milestone_interval
|
|
57
|
+
self._last_logged_percentage = -1
|
|
58
|
+
self.log = structlog.get_logger()
|
|
59
|
+
|
|
60
|
+
async def on_progress(self, event: ProgressEvent) -> None:
|
|
61
|
+
"""Log progress at milestone intervals."""
|
|
62
|
+
percentage = int(event.percentage)
|
|
63
|
+
|
|
64
|
+
# Log at milestone intervals (0%, 10%, 20%, etc.)
|
|
65
|
+
milestone = (percentage // self.milestone_interval) * self.milestone_interval
|
|
66
|
+
|
|
67
|
+
if milestone > self._last_logged_percentage and milestone <= percentage:
|
|
68
|
+
self.log.info(
|
|
69
|
+
"Progress milestone reached",
|
|
70
|
+
operation=event.operation,
|
|
71
|
+
percentage=milestone,
|
|
72
|
+
current=event.current,
|
|
73
|
+
total=event.total,
|
|
74
|
+
message=event.message,
|
|
75
|
+
)
|
|
76
|
+
self._last_logged_percentage = milestone
|
|
77
|
+
|
|
78
|
+
async def on_complete(self, operation: str) -> None:
|
|
79
|
+
"""Log completion of the operation."""
|
|
80
|
+
self.log.info("Operation completed", operation=operation)
|
|
81
|
+
|
|
82
|
+
|
|
45
83
|
class LazyProgressCallback(ProgressCallback):
|
|
46
84
|
"""Progress callback that only shows progress when there's actual work to do."""
|
|
47
85
|
|
|
@@ -125,3 +163,8 @@ def create_multi_stage_progress_callback() -> MultiStageProgressCallback:
|
|
|
125
163
|
return MultiStageProgressCallback(
|
|
126
164
|
lambda operation: create_progress_bar(operation, "items")
|
|
127
165
|
)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def create_log_progress_callback(milestone_interval: int = 10) -> LogProgressCallback:
|
|
169
|
+
"""Create a log-based progress callback for server environments."""
|
|
170
|
+
return LogProgressCallback(milestone_interval=milestone_interval)
|
kodit/utils/dump_openapi.py
CHANGED
|
@@ -21,6 +21,10 @@ if __name__ == "__main__":
|
|
|
21
21
|
openapi = app.openapi()
|
|
22
22
|
version = openapi.get("openapi", "unknown version")
|
|
23
23
|
|
|
24
|
+
# Remove any dev tags from the version by retaining only the semver part
|
|
25
|
+
git_tag = openapi["info"]["version"].split(".")[:3]
|
|
26
|
+
openapi["info"]["version"] = ".".join(git_tag)
|
|
27
|
+
|
|
24
28
|
output_json_file = Path(args.out_dir) / "openapi.json"
|
|
25
29
|
|
|
26
30
|
with output_json_file.open("w") as f:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kodit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.12
|
|
4
4
|
Summary: Code indexing for better AI code generation
|
|
5
5
|
Project-URL: Homepage, https://docs.helixml.tech/kodit/
|
|
6
6
|
Project-URL: Documentation, https://docs.helixml.tech/kodit/
|
|
@@ -72,6 +72,8 @@ Kodit connects your AI coding assistant to external codebases to provide accurat
|
|
|
72
72
|
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
|
+
:star: _Help us reach more developers and grow the Helix community. Star this repo!_
|
|
76
|
+
|
|
75
77
|
**Helix Kodit** is an **MCP server** that connects your AI coding assistant to external codebases. It can:
|
|
76
78
|
|
|
77
79
|
- Improve your AI-assisted code by providing canonical examples direct from the source
|
|
@@ -120,6 +122,19 @@ intent. Kodit has been tested to work well with:
|
|
|
120
122
|
- **New in 0.3**: Hybrid search combining BM25 keyword search with semantic search
|
|
121
123
|
- **New in 0.4**: Enhanced MCP tools with rich context parameters and metadata
|
|
122
124
|
|
|
125
|
+
### Hosted MCP Server
|
|
126
|
+
|
|
127
|
+
**New in 0.4**: Try Kodit instantly with our hosted MCP server at [https://kodit.helix.ml/mcp](https://kodit.helix.ml/mcp)! No installation required - just add it to your AI coding assistant and start searching popular codebases immediately.
|
|
128
|
+
|
|
129
|
+
The hosted server provides:
|
|
130
|
+
|
|
131
|
+
- Pre-indexed popular open source repositories
|
|
132
|
+
- Zero configuration - works out of the box
|
|
133
|
+
- Same powerful search capabilities as self-hosted Kodit
|
|
134
|
+
- Perfect for trying Kodit before setting up your own instance
|
|
135
|
+
|
|
136
|
+
Find out more in the [hosted Kodit documentation](https://docs.helix.ml/kodit/reference/hosted-kodit/).
|
|
137
|
+
|
|
123
138
|
### Enterprise Ready
|
|
124
139
|
|
|
125
140
|
Out of the box, Kodit works with a local SQLite database and very small, local models.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
kodit/.gitignore,sha256=ztkjgRwL9Uud1OEi36hGQeDGk3OLK1NfDEO8YqGYy8o,11
|
|
2
2
|
kodit/__init__.py,sha256=aEKHYninUq1yh6jaNfvJBYg-6fenpN132nJt1UU6Jxs,59
|
|
3
|
-
kodit/_version.py,sha256=
|
|
4
|
-
kodit/app.py,sha256
|
|
3
|
+
kodit/_version.py,sha256=LY4sFGHLjqvfo3vSpOS7ED-Kifi9goigErF1wVOVwKc,513
|
|
4
|
+
kodit/app.py,sha256=um69vDbaUdy_auEubKLzFo7oXUK5MIjjMl9O6n8T5wc,3859
|
|
5
5
|
kodit/cli.py,sha256=ZOS_VzCHGjJRZzZpaVR00QXSPIwRXPYu-pTrbEtlyR0,19328
|
|
6
6
|
kodit/config.py,sha256=qk242V-ys2cLRq3vy6SrTi8_HFaDNL-f5i63HIpyh2s,8756
|
|
7
7
|
kodit/database.py,sha256=kI9yBm4uunsgV4-QeVoCBL0wLzU4kYmYv5qZilGnbPE,1740
|
|
@@ -13,8 +13,9 @@ kodit/application/__init__.py,sha256=mH50wTpgP9dhbKztFsL8Dda9Hi18TSnMVxXtpp4aGOA
|
|
|
13
13
|
kodit/application/factories/__init__.py,sha256=bU5CvEnaBePZ7JbkCOp1MGTNP752bnU2uEqmfy5FdRk,37
|
|
14
14
|
kodit/application/factories/code_indexing_factory.py,sha256=R9f0wsj4-3NJFS5SEt_-OIGR_s_01gJXaL3PkZd8MlU,5911
|
|
15
15
|
kodit/application/services/__init__.py,sha256=p5UQNw-H5sxQvs5Etfte93B3cJ1kKW6DNxK34uFvU1E,38
|
|
16
|
-
kodit/application/services/
|
|
17
|
-
kodit/application/services/
|
|
16
|
+
kodit/application/services/auto_indexing_service.py,sha256=9eVYSHj0UHO7B5PlQtcOpnLqiNLi-f5u5d8BPb4HM5A,3154
|
|
17
|
+
kodit/application/services/code_indexing_application_service.py,sha256=4jlndefMecf0U235gj2PtzZmWKULK1XOd8SxE4zhZEI,15317
|
|
18
|
+
kodit/application/services/sync_scheduler.py,sha256=cSjlV46Xl_coq_4EYAvYesHaoOl4jvQXcQQfrZNv8mA,4767
|
|
18
19
|
kodit/domain/__init__.py,sha256=TCpg4Xx-oF4mKV91lo4iXqMEfBT1OoRSYnbG-zVWolA,66
|
|
19
20
|
kodit/domain/entities.py,sha256=EY43R0LOTmsaVsZGS3TWz0Bx5kF3Gm-Knqe6kLZaf9Y,8822
|
|
20
21
|
kodit/domain/errors.py,sha256=yIsgCjM_yOFIg8l7l-t7jM8pgeAX4cfPq0owf7iz3DA,106
|
|
@@ -25,8 +26,8 @@ kodit/domain/services/__init__.py,sha256=Q1GhCK_PqKHYwYE4tkwDz5BIyXkJngLBBOHhzvX
|
|
|
25
26
|
kodit/domain/services/bm25_service.py,sha256=nsfTan3XtDwXuuAu1LUv-6Jukm6qFKVqqCVymjyepZQ,3625
|
|
26
27
|
kodit/domain/services/embedding_service.py,sha256=7drYRC2kjg0WJmo06a2E9N0vDnwInUlBB96twjz2BT8,4526
|
|
27
28
|
kodit/domain/services/enrichment_service.py,sha256=XsXg3nV-KN4rqtC7Zro_ZiZ6RSq-1eA1MG6IDzFGyBA,1316
|
|
28
|
-
kodit/domain/services/index_query_service.py,sha256=
|
|
29
|
-
kodit/domain/services/index_service.py,sha256=
|
|
29
|
+
kodit/domain/services/index_query_service.py,sha256=cDQkgpJ3JbyeZ3z3GTIqH1JzhhKE_LBIwYE6b-lakwU,2172
|
|
30
|
+
kodit/domain/services/index_service.py,sha256=uVwDUEQWfZ5yJRvcjaWW7P9gCZttmnlkI51IHz52eew,11554
|
|
30
31
|
kodit/infrastructure/__init__.py,sha256=HzEYIjoXnkz_i_MHO2e0sIVYweUcRnl2RpyBiTbMObU,28
|
|
31
32
|
kodit/infrastructure/api/__init__.py,sha256=U0TSMPpHrlj1zbAtleuZjU3nXGwudyMe-veNBgvODwM,34
|
|
32
33
|
kodit/infrastructure/api/middleware/__init__.py,sha256=6m7eE5k5buboJbuzyX5E9-Tf99yNwFaeJF0f_6HwLyM,30
|
|
@@ -42,8 +43,8 @@ kodit/infrastructure/api/v1/schemas/index.py,sha256=NtL09YtO50h-ddpAFxNf-dyxu_Xi
|
|
|
42
43
|
kodit/infrastructure/api/v1/schemas/search.py,sha256=CWzg5SIMUJ_4yM-ZfgSLWCanMxov6AyGgQQcOMkRlGw,5618
|
|
43
44
|
kodit/infrastructure/bm25/__init__.py,sha256=DmGbrEO34FOJy4e685BbyxLA7gPW1eqs2gAxsp6JOuM,34
|
|
44
45
|
kodit/infrastructure/bm25/bm25_factory.py,sha256=I4eo7qRslnyXIRkBf-StZ5ga2Evrr5J5YFocTChFD3g,884
|
|
45
|
-
kodit/infrastructure/bm25/local_bm25_repository.py,sha256=
|
|
46
|
-
kodit/infrastructure/bm25/vectorchord_bm25_repository.py,sha256=
|
|
46
|
+
kodit/infrastructure/bm25/local_bm25_repository.py,sha256=qdDRiiap168XivjkukRHVj1fxlprqRIG0iRSaseLv5I,4695
|
|
47
|
+
kodit/infrastructure/bm25/vectorchord_bm25_repository.py,sha256=p6ht5K-jlDTvEkmoQygmyLLo9yCn_UFx5MtNTmTImjI,7619
|
|
47
48
|
kodit/infrastructure/cloning/__init__.py,sha256=IzIvX-yeRRFZ-lfvPVSEe_qXszO6DGQdjKwwDigexyQ,30
|
|
48
49
|
kodit/infrastructure/cloning/metadata.py,sha256=GD2UnCC1oR82RD0SVUqk9CJOqzXPxhOAHVOp7jqN6Qc,3571
|
|
49
50
|
kodit/infrastructure/cloning/git/__init__.py,sha256=20ePcp0qE6BuLsjsv4KYB1DzKhMIMsPXwEqIEZtjTJs,34
|
|
@@ -55,8 +56,8 @@ kodit/infrastructure/embedding/vectorchord_vector_search_repository.py,sha256=PI
|
|
|
55
56
|
kodit/infrastructure/embedding/embedding_providers/__init__.py,sha256=qeZ-oAIAxMl5QqebGtO1lq-tHjl_ucAwOXePklcwwGk,34
|
|
56
57
|
kodit/infrastructure/embedding/embedding_providers/batching.py,sha256=a8CL9PX2VLmbeg616fc_lQzfC4BWTVn32m4SEhXpHxc,3279
|
|
57
58
|
kodit/infrastructure/embedding/embedding_providers/hash_embedding_provider.py,sha256=V6OdCuWyQQOvo3OJGRi-gBKDApIcrELydFg7T696P5s,2257
|
|
58
|
-
kodit/infrastructure/embedding/embedding_providers/local_embedding_provider.py,sha256=
|
|
59
|
-
kodit/infrastructure/embedding/embedding_providers/openai_embedding_provider.py,sha256=
|
|
59
|
+
kodit/infrastructure/embedding/embedding_providers/local_embedding_provider.py,sha256=9aLV1Zg4KMhYWlGRwgAUtswW4aIabNqbsipWhAn64RI,4133
|
|
60
|
+
kodit/infrastructure/embedding/embedding_providers/openai_embedding_provider.py,sha256=MA68eoAyIKIfazWgm4XrCyWF8BIzjp8dNi_aoLHPaB0,3844
|
|
60
61
|
kodit/infrastructure/enrichment/__init__.py,sha256=8acZKNzql8Fs0lceFu9U3KoUrOptRBtVIxr_Iw6lz3Y,40
|
|
61
62
|
kodit/infrastructure/enrichment/enrichment_factory.py,sha256=2h-c96FWgSi0UG6IeL9Yjae80KYdzJqes5HIJQrkpc8,1919
|
|
62
63
|
kodit/infrastructure/enrichment/local_enrichment_provider.py,sha256=7Vlwu1jPJ5KNUn1a51M1P-laUd5YVFJA8EeH6KO-95k,3960
|
|
@@ -67,7 +68,6 @@ kodit/infrastructure/git/git_utils.py,sha256=KERwmhWDR4ooMQKS-nSPxjvdCzoWF9NS6nh
|
|
|
67
68
|
kodit/infrastructure/ignore/__init__.py,sha256=VzFv8XOzHmsu0MEGnWVSF6KsgqLBmvHlRqAkT1Xb1MY,36
|
|
68
69
|
kodit/infrastructure/ignore/ignore_pattern_provider.py,sha256=zdxun3GodLfXxyssBK8QDUK58xb4fBJ0SKcHUyn3pzM,2131
|
|
69
70
|
kodit/infrastructure/indexing/__init__.py,sha256=7UPRa2jwCAsa0Orsp6PqXSF8iIXJVzXHMFmrKkI9yH8,38
|
|
70
|
-
kodit/infrastructure/indexing/auto_indexing_service.py,sha256=PgAyrmR8jNkAOlGnhQjFkqoE22oh-IwYTCg_v4o45Fo,2764
|
|
71
71
|
kodit/infrastructure/indexing/fusion_service.py,sha256=2B0guBsuKz19uWcs18sIJpUJPzXoRvULgl7UNWQGysA,1809
|
|
72
72
|
kodit/infrastructure/mappers/__init__.py,sha256=QPHOjNreXmBPPovZ6elnYFS0vD-IsmrGl4TT01FCKro,77
|
|
73
73
|
kodit/infrastructure/mappers/index_mapper.py,sha256=ZSfu8kjTaa8_UY0nTqr4b02NS3VrjqZYkduCN71AL2g,12743
|
|
@@ -79,7 +79,7 @@ kodit/infrastructure/sqlalchemy/embedding_repository.py,sha256=dC2Wzj_zQiWExwfSc
|
|
|
79
79
|
kodit/infrastructure/sqlalchemy/entities.py,sha256=Dmh0z-dMI0wfMAPpf62kxU4md6NUH9P5Nx1QSTITOfg,5961
|
|
80
80
|
kodit/infrastructure/sqlalchemy/index_repository.py,sha256=UlDH6Qluuat1T0GaATko29fwQPAaUh2WLWiGurBW42w,23598
|
|
81
81
|
kodit/infrastructure/ui/__init__.py,sha256=CzbLOBwIZ6B6iAHEd1L8cIBydCj-n_kobxJAhz2I9_Y,32
|
|
82
|
-
kodit/infrastructure/ui/progress.py,sha256=
|
|
82
|
+
kodit/infrastructure/ui/progress.py,sha256=SHEUoQA_x36z4nqHrQduVrrWIvFfX6QxAawC7zQ50pw,6433
|
|
83
83
|
kodit/infrastructure/ui/spinner.py,sha256=GcP115qtR0VEnGfMEtsGoAUpRzVGUSfiUXfoJJERngA,2357
|
|
84
84
|
kodit/migrations/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58
|
|
85
85
|
kodit/migrations/__init__.py,sha256=lP5MuwlyWRMO6UcDWnQcQ3G-GYHcFb6rl9gYPHJ1sjo,40
|
|
@@ -93,10 +93,10 @@ kodit/migrations/versions/9e53ea8bb3b0_add_authors.py,sha256=a32Zm8KUQyiiLkjKNPY
|
|
|
93
93
|
kodit/migrations/versions/__init__.py,sha256=9-lHzptItTzq_fomdIRBegQNm4Znx6pVjwD4MiqRIdo,36
|
|
94
94
|
kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=r7ukmJ_axXLAWewYx-F1fEmZ4JbtFd37i7cSb0tq3y0,1722
|
|
95
95
|
kodit/utils/__init__.py,sha256=DPEB1i8evnLF4Ns3huuAYg-0pKBFKUFuiDzOKG9r-sw,33
|
|
96
|
-
kodit/utils/dump_openapi.py,sha256=
|
|
96
|
+
kodit/utils/dump_openapi.py,sha256=29VdjHpNSaGAg7RjQw0meq1OLhljCx1ElgBlTC8xoF4,1247
|
|
97
97
|
kodit/utils/path_utils.py,sha256=thK6YGGNvQThdBaCYCCeCvS1L8x-lwl3AoGht2jnjGw,1645
|
|
98
|
-
kodit-0.3.
|
|
99
|
-
kodit-0.3.
|
|
100
|
-
kodit-0.3.
|
|
101
|
-
kodit-0.3.
|
|
102
|
-
kodit-0.3.
|
|
98
|
+
kodit-0.3.12.dist-info/METADATA,sha256=xfv-ASXWA_i_TkP-TtPQDkqL2Yl_dKohqwtkXZqktR8,7672
|
|
99
|
+
kodit-0.3.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
100
|
+
kodit-0.3.12.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
|
|
101
|
+
kodit-0.3.12.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
102
|
+
kodit-0.3.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|