kodit 0.1.15__py3-none-any.whl → 0.1.17__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/cli.py +105 -19
- kodit/embedding/embedding_factory.py +2 -2
- kodit/embedding/embedding_provider/embedding_provider.py +9 -2
- kodit/embedding/embedding_provider/openai_embedding_provider.py +19 -7
- kodit/embedding/vectorchord_vector_search_service.py +26 -15
- kodit/enrichment/__init__.py +1 -0
- kodit/enrichment/enrichment_factory.py +23 -0
- kodit/enrichment/enrichment_provider/__init__.py +1 -0
- kodit/enrichment/enrichment_provider/enrichment_provider.py +16 -0
- kodit/enrichment/enrichment_provider/local_enrichment_provider.py +63 -0
- kodit/enrichment/enrichment_provider/openai_enrichment_provider.py +77 -0
- kodit/enrichment/enrichment_service.py +33 -0
- kodit/indexing/fusion.py +67 -0
- kodit/indexing/indexing_repository.py +41 -23
- kodit/indexing/indexing_service.py +128 -8
- kodit/mcp.py +25 -16
- kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py +44 -0
- kodit/snippets/languages/go.scm +26 -0
- kodit/source/source_models.py +4 -4
- kodit-0.1.17.dist-info/METADATA +152 -0
- {kodit-0.1.15.dist-info → kodit-0.1.17.dist-info}/RECORD +25 -18
- kodit/search/__init__.py +0 -1
- kodit/search/search_repository.py +0 -57
- kodit/search/search_service.py +0 -135
- kodit-0.1.15.dist-info/METADATA +0 -89
- {kodit-0.1.15.dist-info → kodit-0.1.17.dist-info}/WHEEL +0 -0
- {kodit-0.1.15.dist-info → kodit-0.1.17.dist-info}/entry_points.txt +0 -0
- {kodit-0.1.15.dist-info → kodit-0.1.17.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
kodit/.gitignore,sha256=ztkjgRwL9Uud1OEi36hGQeDGk3OLK1NfDEO8YqGYy8o,11
|
|
2
2
|
kodit/__init__.py,sha256=aEKHYninUq1yh6jaNfvJBYg-6fenpN132nJt1UU6Jxs,59
|
|
3
|
-
kodit/_version.py,sha256=
|
|
3
|
+
kodit/_version.py,sha256=02_IA72k4pYar3Dp1g66WmynC3vl-jdmnf6lQF8QpE4,513
|
|
4
4
|
kodit/app.py,sha256=Mr5BFHOHx5zppwjC4XPWVvHjwgl1yrKbUjTWXKubJQM,891
|
|
5
|
-
kodit/cli.py,sha256=
|
|
5
|
+
kodit/cli.py,sha256=i7eEt0FdIQGEfXKFte-8fBcZZGE8BPXBp40aGwJDQGI,11323
|
|
6
6
|
kodit/config.py,sha256=2W2u5J8j-Mbt-C4xzOuK-PeuDCx0S_rnCXPhBwvfLT4,4353
|
|
7
7
|
kodit/database.py,sha256=WB1KpVxUYPgiJGU0gJa2hqytYB8wJEJ5z3WayhWzNMU,2403
|
|
8
8
|
kodit/log.py,sha256=HU1OmuxO4FcVw61k4WW7Y4WM7BrDaeplw1PcBHhuIZY,5434
|
|
9
|
-
kodit/mcp.py,sha256=
|
|
9
|
+
kodit/mcp.py,sha256=QruyPskWB0_x59pkfj5BBeXuR13GMny5TAZEa2j4U9s,5752
|
|
10
10
|
kodit/middleware.py,sha256=I6FOkqG9-8RH5kR1-0ZoQWfE4qLCB8lZYv8H_OCH29o,2714
|
|
11
11
|
kodit/bm25/__init__.py,sha256=j8zyriNWhbwE5Lbybzg1hQAhANlU9mKHWw4beeUR6og,19
|
|
12
12
|
kodit/bm25/keyword_search_factory.py,sha256=rp-wx3DJsc2KlELK1V337EyeYvmwnMQwUqOo1WVPSmg,631
|
|
@@ -14,21 +14,29 @@ kodit/bm25/keyword_search_service.py,sha256=aBbWQKgQmi2re3EIHdXFS00n7Wj3b2D0pZsL
|
|
|
14
14
|
kodit/bm25/local_bm25.py,sha256=AAbFhbQDqyL3d7jsPL7W4HsLxdoYctaDsREUXOLy6jM,3260
|
|
15
15
|
kodit/bm25/vectorchord_bm25.py,sha256=_nGrkUReYLLV-L8RIuIVLwjuhSYZl9T532n5OVf0kWs,6393
|
|
16
16
|
kodit/embedding/__init__.py,sha256=h9NXzDA1r-K23nvBajBV-RJzHJN0p3UJ7UQsmdnOoRw,24
|
|
17
|
-
kodit/embedding/embedding_factory.py,sha256=
|
|
17
|
+
kodit/embedding/embedding_factory.py,sha256=UGnFRyyQXazSUOwyW4Hg7Vq2-kfAoDj9lD4CTLu8x04,1630
|
|
18
18
|
kodit/embedding/embedding_models.py,sha256=rN90vSs86dYiqoawcp8E9jtwY31JoJXYfaDlsJK7uqc,656
|
|
19
19
|
kodit/embedding/embedding_repository.py,sha256=-ux3scpBzel8c0pMH9fNOEsSXFIzl-IfgaWrkTb1szo,6907
|
|
20
20
|
kodit/embedding/local_vector_search_service.py,sha256=hkF0qlfzjyGt400qIX9Mr6B7b7i8WvYIYWN2Z2C_pcs,1907
|
|
21
21
|
kodit/embedding/vector_search_service.py,sha256=pQJ129QjGrAWOXzqkywmgtDRpy8_gtzYgkivyqF9Vrs,1009
|
|
22
|
-
kodit/embedding/vectorchord_vector_search_service.py,sha256=
|
|
22
|
+
kodit/embedding/vectorchord_vector_search_service.py,sha256=63Xf7_nAz3xWOwrmZibw8Q-xoRdCrPDDpdSA_WE7mrc,5131
|
|
23
23
|
kodit/embedding/embedding_provider/__init__.py,sha256=h9NXzDA1r-K23nvBajBV-RJzHJN0p3UJ7UQsmdnOoRw,24
|
|
24
|
-
kodit/embedding/embedding_provider/embedding_provider.py,sha256=
|
|
24
|
+
kodit/embedding/embedding_provider/embedding_provider.py,sha256=Tf3bwUsUMzAgoyLFM5qBtOLqPp1qr03TzrwGczkDvy0,1835
|
|
25
25
|
kodit/embedding/embedding_provider/hash_embedding_provider.py,sha256=nAhlhh8j8PqqCCbhVl26Y8ntFBm2vJBCtB4X04g5Wwg,2638
|
|
26
26
|
kodit/embedding/embedding_provider/local_embedding_provider.py,sha256=4ER-UPq506Y0TWU6qcs0nUqw6bSKQkSrdog-DhNQWM8,1906
|
|
27
|
-
kodit/embedding/embedding_provider/openai_embedding_provider.py,sha256=
|
|
27
|
+
kodit/embedding/embedding_provider/openai_embedding_provider.py,sha256=V_jdUXiaGdslplwxMlfgFc4_hAVS2eaJXMTs2C7RiLI,2666
|
|
28
|
+
kodit/enrichment/__init__.py,sha256=vBEolHpKaHUhfINX0dSGyAPlvgpLNAer9YzFtdvCB24,18
|
|
29
|
+
kodit/enrichment/enrichment_factory.py,sha256=vKjkUTdhj74IW2S4GENDWdWMJx6BwUSZjJGDC0i7DSk,787
|
|
30
|
+
kodit/enrichment/enrichment_service.py,sha256=87Sd3gGbEMJYb_wVrHG8L1yGIZmQNR7foUS4_y94azI,977
|
|
31
|
+
kodit/enrichment/enrichment_provider/__init__.py,sha256=klf8iuLVWX4iRz-DZQauFFNAoJC5CByczh48TBZPW-o,27
|
|
32
|
+
kodit/enrichment/enrichment_provider/enrichment_provider.py,sha256=E0H5rq3OENM0yYbA8K_3nSnj5lUHCpoIOqpWLo-2MVU,413
|
|
33
|
+
kodit/enrichment/enrichment_provider/local_enrichment_provider.py,sha256=bR6HR1gH7wtZdMLOwaKdASjvllRo1FlNW9GyZC11zAM,2164
|
|
34
|
+
kodit/enrichment/enrichment_provider/openai_enrichment_provider.py,sha256=gYuFTAeIVdQNlCUvNSPgRoiRwCvRD0C8419h8ubyABA,2725
|
|
28
35
|
kodit/indexing/__init__.py,sha256=cPyi2Iej3G1JFWlWr7X80_UrsMaTu5W5rBwgif1B3xo,75
|
|
36
|
+
kodit/indexing/fusion.py,sha256=TZb4fPAedXdEUXzwzOofW98QIOymdbclBOP1KOijuEk,1674
|
|
29
37
|
kodit/indexing/indexing_models.py,sha256=6NX9HVcj6Pu9ePwHC7n-PWSyAgukpJq0nCNmUIigtbo,1282
|
|
30
|
-
kodit/indexing/indexing_repository.py,sha256=
|
|
31
|
-
kodit/indexing/indexing_service.py,sha256=
|
|
38
|
+
kodit/indexing/indexing_repository.py,sha256=dqOS0pxKM6bUjMXWqYukAK8XdiD36OnskFASgZRXRQM,6955
|
|
39
|
+
kodit/indexing/indexing_service.py,sha256=_uhoqBic3_zXNJOsKt_w-TgX5ebf7OBwbqMdO9zectM,10779
|
|
32
40
|
kodit/migrations/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58
|
|
33
41
|
kodit/migrations/__init__.py,sha256=lP5MuwlyWRMO6UcDWnQcQ3G-GYHcFb6rl9gYPHJ1sjo,40
|
|
34
42
|
kodit/migrations/env.py,sha256=w1M7OZh-ZeR2dPHS0ByXAUxQjfZQ8xIzMseWuzLDTWw,2469
|
|
@@ -36,23 +44,22 @@ kodit/migrations/script.py.mako,sha256=zWziKtiwYKEWuwPV_HBNHwa9LCT45_bi01-uSNFaO
|
|
|
36
44
|
kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py,sha256=-61qol9PfQKILCDQRA5jEaats9aGZs9Wdtp-j-38SF4,1644
|
|
37
45
|
kodit/migrations/versions/85155663351e_initial.py,sha256=Cg7zlF871o9ShV5rQMQ1v7hRV7fI59veDY9cjtTrs-8,3306
|
|
38
46
|
kodit/migrations/versions/__init__.py,sha256=9-lHzptItTzq_fomdIRBegQNm4Znx6pVjwD4MiqRIdo,36
|
|
39
|
-
kodit/
|
|
40
|
-
kodit/search/search_repository.py,sha256=6q0k7JMTM_7hPK2TSA30CykGbc5N16kCL7HTjlbai0w,1563
|
|
41
|
-
kodit/search/search_service.py,sha256=-XlbP_50e1dKFJ5jBvex5FjLnffW43LcwQV_SeYNFB0,3944
|
|
47
|
+
kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=rI8LmjF-I2OMxZ2nOIF_NRmqOLXe45hL_iz_nx97DTQ,1680
|
|
42
48
|
kodit/snippets/__init__.py,sha256=-2coNoCRjTixU9KcP6alpmt7zqf37tCRWH3D7FPJ8dg,48
|
|
43
49
|
kodit/snippets/method_snippets.py,sha256=EVHhSNWahAC5nSXv9fWVFJY2yq25goHdCSCuENC07F8,4145
|
|
44
50
|
kodit/snippets/snippets.py,sha256=mwN0bM1Msu8ZeEsUHyQ7tx3Hj3vZsm8G7Wu4eWSkLY8,1539
|
|
45
51
|
kodit/snippets/languages/__init__.py,sha256=Bj5KKZSls2MQ8ZY1S_nHg447MgGZW-2WZM-oq6vjwwA,1187
|
|
46
52
|
kodit/snippets/languages/csharp.scm,sha256=gbBN4RiV1FBuTJF6orSnDFi8H9JwTw-d4piLJYsWUsc,222
|
|
53
|
+
kodit/snippets/languages/go.scm,sha256=SEX9mTOrhP2KiQW7oflDKkd21u5dK56QbJ4LvTDxY8A,533
|
|
47
54
|
kodit/snippets/languages/python.scm,sha256=ee85R9PBzwye3IMTE7-iVoKWd_ViU3EJISTyrFGrVeo,429
|
|
48
55
|
kodit/source/__init__.py,sha256=1NTZyPdjThVQpZO1Mp1ColVsS7sqYanOVLqnoqV9Ipo,83
|
|
49
|
-
kodit/source/source_models.py,sha256=
|
|
56
|
+
kodit/source/source_models.py,sha256=kcC59XPSDDMth2mOYK3FakqTN0jxKFaTDch0ejyD9Sw,2446
|
|
50
57
|
kodit/source/source_repository.py,sha256=0EksMpoLzdkfe8S4eeCm4Sf7TuxsOzOzaF4BBsMYo-4,3163
|
|
51
58
|
kodit/source/source_service.py,sha256=u_GaH07ewakThQJRfT8O_yZ54A52qLtJuM1bF3xUT2A,9633
|
|
52
59
|
kodit/util/__init__.py,sha256=bPu6CtqDWCRGU7VgW2_aiQrCBi8G89FS6k1PjvDajJ0,37
|
|
53
60
|
kodit/util/spinner.py,sha256=R9bzrHtBiIH6IfLbmsIVHL53s8vg-tqW4lwGGALu4dw,1932
|
|
54
|
-
kodit-0.1.
|
|
55
|
-
kodit-0.1.
|
|
56
|
-
kodit-0.1.
|
|
57
|
-
kodit-0.1.
|
|
58
|
-
kodit-0.1.
|
|
61
|
+
kodit-0.1.17.dist-info/METADATA,sha256=MvKNOh3LfOOuviJBzZVqPaP0__Z-_DdoUzgfc2lUBFE,5822
|
|
62
|
+
kodit-0.1.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
63
|
+
kodit-0.1.17.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
|
|
64
|
+
kodit-0.1.17.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
65
|
+
kodit-0.1.17.dist-info/RECORD,,
|
kodit/search/__init__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Search for relevant snippets."""
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"""Repository for searching for relevant snippets."""
|
|
2
|
-
|
|
3
|
-
from typing import TypeVar
|
|
4
|
-
|
|
5
|
-
from sqlalchemy import (
|
|
6
|
-
select,
|
|
7
|
-
)
|
|
8
|
-
from sqlalchemy.ext.asyncio import AsyncSession
|
|
9
|
-
|
|
10
|
-
from kodit.indexing.indexing_models import Snippet
|
|
11
|
-
from kodit.source.source_models import File
|
|
12
|
-
|
|
13
|
-
T = TypeVar("T")
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class SearchRepository:
|
|
17
|
-
"""Repository for searching for relevant snippets."""
|
|
18
|
-
|
|
19
|
-
def __init__(self, session: AsyncSession) -> None:
|
|
20
|
-
"""Initialize the search repository.
|
|
21
|
-
|
|
22
|
-
Args:
|
|
23
|
-
session: The SQLAlchemy async session to use for database operations.
|
|
24
|
-
|
|
25
|
-
"""
|
|
26
|
-
self.session = session
|
|
27
|
-
|
|
28
|
-
async def list_snippet_ids(self) -> list[int]:
|
|
29
|
-
"""List all snippet IDs.
|
|
30
|
-
|
|
31
|
-
Returns:
|
|
32
|
-
A list of all snippets.
|
|
33
|
-
|
|
34
|
-
"""
|
|
35
|
-
query = select(Snippet.id)
|
|
36
|
-
rows = await self.session.execute(query)
|
|
37
|
-
return list(rows.scalars().all())
|
|
38
|
-
|
|
39
|
-
async def list_snippets_by_ids(self, ids: list[int]) -> list[tuple[File, Snippet]]:
|
|
40
|
-
"""List snippets by IDs.
|
|
41
|
-
|
|
42
|
-
Returns:
|
|
43
|
-
A list of snippets in the same order as the input IDs.
|
|
44
|
-
|
|
45
|
-
"""
|
|
46
|
-
query = (
|
|
47
|
-
select(Snippet, File)
|
|
48
|
-
.where(Snippet.id.in_(ids))
|
|
49
|
-
.join(File, Snippet.file_id == File.id)
|
|
50
|
-
)
|
|
51
|
-
rows = await self.session.execute(query)
|
|
52
|
-
|
|
53
|
-
# Create a dictionary for O(1) lookup of results by ID
|
|
54
|
-
id_to_result = {snippet.id: (file, snippet) for snippet, file in rows.all()}
|
|
55
|
-
|
|
56
|
-
# Return results in the same order as input IDs
|
|
57
|
-
return [id_to_result[i] for i in ids]
|
kodit/search/search_service.py
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"""Search service."""
|
|
2
|
-
|
|
3
|
-
import pydantic
|
|
4
|
-
import structlog
|
|
5
|
-
|
|
6
|
-
from kodit.bm25.keyword_search_service import BM25Result, KeywordSearchProvider
|
|
7
|
-
from kodit.embedding.vector_search_service import VectorSearchService
|
|
8
|
-
from kodit.search.search_repository import SearchRepository
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class SearchRequest(pydantic.BaseModel):
|
|
12
|
-
"""Request for a search."""
|
|
13
|
-
|
|
14
|
-
code_query: str | None = None
|
|
15
|
-
keywords: list[str] | None = None
|
|
16
|
-
top_k: int = 10
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class SearchResult(pydantic.BaseModel):
|
|
20
|
-
"""Data transfer object for search results.
|
|
21
|
-
|
|
22
|
-
This model represents a single search result, containing both the file path
|
|
23
|
-
and the matching snippet content.
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
id: int
|
|
27
|
-
uri: str
|
|
28
|
-
content: str
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class Snippet(pydantic.BaseModel):
|
|
32
|
-
"""Snippet model."""
|
|
33
|
-
|
|
34
|
-
content: str
|
|
35
|
-
file_path: str
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class SearchService:
|
|
39
|
-
"""Service for searching for relevant data."""
|
|
40
|
-
|
|
41
|
-
def __init__(
|
|
42
|
-
self,
|
|
43
|
-
repository: SearchRepository,
|
|
44
|
-
keyword_search_provider: KeywordSearchProvider,
|
|
45
|
-
embedding_service: VectorSearchService,
|
|
46
|
-
) -> None:
|
|
47
|
-
"""Initialize the search service."""
|
|
48
|
-
self.repository = repository
|
|
49
|
-
self.log = structlog.get_logger(__name__)
|
|
50
|
-
self.keyword_search_provider = keyword_search_provider
|
|
51
|
-
self.code_embedding_service = embedding_service
|
|
52
|
-
|
|
53
|
-
async def search(self, request: SearchRequest) -> list[SearchResult]:
|
|
54
|
-
"""Search for relevant data."""
|
|
55
|
-
fusion_list = []
|
|
56
|
-
if request.keywords:
|
|
57
|
-
# Gather results for each keyword
|
|
58
|
-
result_ids: list[BM25Result] = []
|
|
59
|
-
for keyword in request.keywords:
|
|
60
|
-
results = await self.keyword_search_provider.retrieve(
|
|
61
|
-
keyword, request.top_k
|
|
62
|
-
)
|
|
63
|
-
result_ids.extend(results)
|
|
64
|
-
|
|
65
|
-
# Sort results by score
|
|
66
|
-
result_ids.sort(key=lambda x: x[1], reverse=True)
|
|
67
|
-
|
|
68
|
-
self.log.debug("Search results (BM25)", results=result_ids)
|
|
69
|
-
|
|
70
|
-
bm25_results = [x[0] for x in result_ids]
|
|
71
|
-
fusion_list.append(bm25_results)
|
|
72
|
-
|
|
73
|
-
# Compute embedding for semantic query
|
|
74
|
-
semantic_results = []
|
|
75
|
-
if request.code_query:
|
|
76
|
-
query_embedding = await self.code_embedding_service.retrieve(
|
|
77
|
-
request.code_query, top_k=request.top_k
|
|
78
|
-
)
|
|
79
|
-
semantic_results = [x.snippet_id for x in query_embedding]
|
|
80
|
-
fusion_list.append(semantic_results)
|
|
81
|
-
|
|
82
|
-
if len(fusion_list) == 0:
|
|
83
|
-
return []
|
|
84
|
-
|
|
85
|
-
# Combine all results together with RFF if required
|
|
86
|
-
final_results = reciprocal_rank_fusion(fusion_list, k=60)
|
|
87
|
-
|
|
88
|
-
# Extract ids from final results
|
|
89
|
-
final_ids = [x[0] for x in final_results]
|
|
90
|
-
|
|
91
|
-
# Get snippets from database (up to top_k)
|
|
92
|
-
search_results = await self.repository.list_snippets_by_ids(
|
|
93
|
-
final_ids[: request.top_k]
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
return [
|
|
97
|
-
SearchResult(
|
|
98
|
-
id=snippet.id,
|
|
99
|
-
uri=file.uri,
|
|
100
|
-
content=snippet.content,
|
|
101
|
-
)
|
|
102
|
-
for file, snippet in search_results
|
|
103
|
-
]
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
def reciprocal_rank_fusion(
|
|
107
|
-
rankings: list[list[int]], k: float = 60
|
|
108
|
-
) -> list[tuple[int, float]]:
|
|
109
|
-
"""RRF prioritises results that are present in all results.
|
|
110
|
-
|
|
111
|
-
Args:
|
|
112
|
-
rankings: List of rankers, each containing a list of document ids. Top of the
|
|
113
|
-
list is considered to be the best result.
|
|
114
|
-
k: Parameter for RRF.
|
|
115
|
-
|
|
116
|
-
Returns:
|
|
117
|
-
Dictionary of ids and their scores.
|
|
118
|
-
|
|
119
|
-
"""
|
|
120
|
-
scores = {}
|
|
121
|
-
for ranker in rankings:
|
|
122
|
-
for rank in ranker:
|
|
123
|
-
scores[rank] = float(0)
|
|
124
|
-
|
|
125
|
-
for ranker in rankings:
|
|
126
|
-
for i, rank in enumerate(ranker):
|
|
127
|
-
scores[rank] += 1.0 / (k + i)
|
|
128
|
-
|
|
129
|
-
# Create a list of tuples of ids and their scores
|
|
130
|
-
results = [(rank, scores[rank]) for rank in scores]
|
|
131
|
-
|
|
132
|
-
# Sort results by score
|
|
133
|
-
results.sort(key=lambda x: x[1], reverse=True)
|
|
134
|
-
|
|
135
|
-
return results
|
kodit-0.1.15.dist-info/METADATA
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: kodit
|
|
3
|
-
Version: 0.1.15
|
|
4
|
-
Summary: Code indexing for better AI code generation
|
|
5
|
-
Project-URL: Homepage, https://docs.helixml.tech/kodit/
|
|
6
|
-
Project-URL: Documentation, https://docs.helixml.tech/kodit/
|
|
7
|
-
Project-URL: Repository, https://github.com/helixml/kodit.git
|
|
8
|
-
Project-URL: Issues, https://github.com/helixml/kodit/issues
|
|
9
|
-
Project-URL: Changelog, https://github.com/helixml/kodit/releases
|
|
10
|
-
Author-email: "Helix.ML" <founders@helix.ml>
|
|
11
|
-
Maintainer-email: "Helix.ML" <founders@helix.ml>
|
|
12
|
-
License-Expression: Apache-2.0
|
|
13
|
-
License-File: LICENSE
|
|
14
|
-
Keywords: ai,indexing,mcp,rag
|
|
15
|
-
Classifier: Development Status :: 2 - Pre-Alpha
|
|
16
|
-
Classifier: Intended Audience :: Developers
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
-
Classifier: Topic :: Software Development :: Code Generators
|
|
19
|
-
Requires-Python: >=3.12
|
|
20
|
-
Requires-Dist: aiofiles>=24.1.0
|
|
21
|
-
Requires-Dist: aiosqlite>=0.20.0
|
|
22
|
-
Requires-Dist: alembic>=1.15.2
|
|
23
|
-
Requires-Dist: asgi-correlation-id>=4.3.4
|
|
24
|
-
Requires-Dist: asyncpg>=0.30.0
|
|
25
|
-
Requires-Dist: better-exceptions>=0.3.3
|
|
26
|
-
Requires-Dist: bm25s[core]>=0.2.12
|
|
27
|
-
Requires-Dist: click>=8.1.8
|
|
28
|
-
Requires-Dist: colorama>=0.4.6
|
|
29
|
-
Requires-Dist: dotenv>=0.9.9
|
|
30
|
-
Requires-Dist: fastapi[standard]>=0.115.12
|
|
31
|
-
Requires-Dist: fastmcp>=2.3.3
|
|
32
|
-
Requires-Dist: gitpython>=3.1.44
|
|
33
|
-
Requires-Dist: hf-xet>=1.1.2
|
|
34
|
-
Requires-Dist: httpx-retries>=0.3.2
|
|
35
|
-
Requires-Dist: httpx>=0.28.1
|
|
36
|
-
Requires-Dist: openai>=1.82.0
|
|
37
|
-
Requires-Dist: posthog>=4.0.1
|
|
38
|
-
Requires-Dist: pydantic-settings>=2.9.1
|
|
39
|
-
Requires-Dist: pytable-formatter>=0.1.1
|
|
40
|
-
Requires-Dist: sentence-transformers>=4.1.0
|
|
41
|
-
Requires-Dist: sqlalchemy[asyncio]>=2.0.40
|
|
42
|
-
Requires-Dist: structlog>=25.3.0
|
|
43
|
-
Requires-Dist: tdqm>=0.0.1
|
|
44
|
-
Requires-Dist: tiktoken>=0.9.0
|
|
45
|
-
Requires-Dist: tree-sitter-language-pack>=0.7.3
|
|
46
|
-
Requires-Dist: tree-sitter>=0.24.0
|
|
47
|
-
Requires-Dist: uritools>=5.0.0
|
|
48
|
-
Description-Content-Type: text/markdown
|
|
49
|
-
|
|
50
|
-
# kodit
|
|
51
|
-
|
|
52
|
-
## Installation
|
|
53
|
-
|
|
54
|
-
Please choose your preferred installation method. They all ultimately install the kodit
|
|
55
|
-
cli, which contains the kodit MCP server and other tools to manage your data sources.
|
|
56
|
-
|
|
57
|
-
### Docker
|
|
58
|
-
|
|
59
|
-
```sh
|
|
60
|
-
docker run -it --rm registry.helix.ml/helix/kodit:latest
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Always replace latest with a specific version.
|
|
64
|
-
|
|
65
|
-
### pipx
|
|
66
|
-
|
|
67
|
-
```sh
|
|
68
|
-
pipx install kodit
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### homebrew
|
|
72
|
-
|
|
73
|
-
```sh
|
|
74
|
-
brew install helixml/kodit/kodit
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### uv
|
|
78
|
-
|
|
79
|
-
```sh
|
|
80
|
-
uv tool install kodit
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### pip
|
|
84
|
-
|
|
85
|
-
Use this if you want to use kodit as a python library:
|
|
86
|
-
|
|
87
|
-
```sh
|
|
88
|
-
pip install kodit
|
|
89
|
-
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|