diff --git a/slack_index/__init__.py b/cocobee/__init__.py similarity index 100% rename from slack_index/__init__.py rename to cocobee/__init__.py diff --git a/slack_index/app.py b/cocobee/app.py similarity index 83% rename from slack_index/app.py rename to cocobee/app.py index ad39384..75ff5cf 100644 --- a/slack_index/app.py +++ b/cocobee/app.py @@ -1,7 +1,7 @@ """Pipeline entry point. -cocoindex update slack_index/app.py # one-shot catch-up -cocoindex update -L slack_index/app.py # live: re-scan every poll interval +cocoindex update cocobee/app.py # one-shot catch-up +cocoindex update -L cocobee/app.py # live: re-scan every poll interval """ from __future__ import annotations @@ -15,13 +15,13 @@ from cocoindex.resources.rate_limit import RateLimiter from slack_sdk.web.async_client import AsyncWebClient -from slack_index import config -from slack_index.context import DISTILLER, EMBEDDER, LANCE_DB, SLACK, SLACK_LIMIT -from slack_index.distill import Distiller -from slack_index.files import process_file -from slack_index.models import SlackChunk -from slack_index.source import SlackChannelFiles, SlackChannelThreads -from slack_index.threads import process_thread +from cocobee import config +from cocobee.context import DISTILLER, EMBEDDER, LANCE_DB, SLACK, SLACK_LIMIT +from cocobee.distill import Distiller +from cocobee.files import process_file +from cocobee.models import SlackChunk +from cocobee.source import SlackChannelFiles, SlackChannelThreads +from cocobee.threads import process_thread _settings = config.Settings.from_env() diff --git a/slack_index/chunking.py b/cocobee/chunking.py similarity index 92% rename from slack_index/chunking.py rename to cocobee/chunking.py index e0b882a..367ba24 100644 --- a/slack_index/chunking.py +++ b/cocobee/chunking.py @@ -11,9 +11,9 @@ from cocoindex.resources.chunk import Chunk from cocoindex.resources.id import IdGenerator -from slack_index.config import CHUNK_OVERLAP, CHUNK_SIZE -from slack_index.context import EMBEDDER -from slack_index.models import SlackChunk +from cocobee.config import CHUNK_OVERLAP, CHUNK_SIZE +from cocobee.context import EMBEDDER +from cocobee.models import SlackChunk _splitter = RecursiveSplitter() diff --git a/slack_index/config.py b/cocobee/config.py similarity index 100% rename from slack_index/config.py rename to cocobee/config.py diff --git a/slack_index/context.py b/cocobee/context.py similarity index 96% rename from slack_index/context.py rename to cocobee/context.py index 1aa9336..fb2a1fc 100644 --- a/slack_index/context.py +++ b/cocobee/context.py @@ -11,7 +11,7 @@ from slack_sdk.web.async_client import AsyncWebClient if _typing.TYPE_CHECKING: - from slack_index import distill + from cocobee import distill SLACK = coco.ContextKey[AsyncWebClient]("slack") # detect_change: a different distillation model must re-distill everything. diff --git a/slack_index/distill.py b/cocobee/distill.py similarity index 97% rename from slack_index/distill.py rename to cocobee/distill.py index e5df83b..b674be4 100644 --- a/slack_index/distill.py +++ b/cocobee/distill.py @@ -16,8 +16,8 @@ from anthropic import AsyncAnthropic from pydantic import BaseModel, Field -from slack_index.config import DISTILL_MAX_TOKENS, DISTILL_TEMPERATURE -from slack_index.context import DISTILLER +from cocobee.config import DISTILL_MAX_TOKENS, DISTILL_TEMPERATURE +from cocobee.context import DISTILLER _SYSTEM = """You summarise chat from a molecular biology lab's Slack channel. The chat is Korean and informal; the science terms are not. Write in Korean. diff --git a/slack_index/evals.py b/cocobee/evals.py similarity index 97% rename from slack_index/evals.py rename to cocobee/evals.py index efbd25b..93d0eea 100644 --- a/slack_index/evals.py +++ b/cocobee/evals.py @@ -1,7 +1,7 @@ """Score the index against a hand-labelled question set. - python -m slack_index.evals - python -m slack_index.evals --questions evals/questions.yaml --top-k 10 + python -m cocobee.evals + python -m cocobee.evals --questions evals/questions.yaml --top-k 10 Every retrieval change — a different embedding model, grouping, a reranker — is judged by re-running this against the same questions. @@ -18,7 +18,7 @@ import yaml -from slack_index.search import Searcher +from cocobee.search import Searcher DEFAULT_QUESTIONS = pathlib.Path("evals/questions.yaml") # The labels quote channel content, so the repo carries only this encrypted copy; diff --git a/slack_index/files.py b/cocobee/files.py similarity index 90% rename from slack_index/files.py rename to cocobee/files.py index 8279aa5..10ae51a 100644 --- a/slack_index/files.py +++ b/cocobee/files.py @@ -9,11 +9,11 @@ import cocoindex as coco from cocoindex.connectors import lancedb -from slack_index.chunking import ChunkMeta, declare_chunks -from slack_index.config import bot_token -from slack_index.context import SLACK_LIMIT -from slack_index.models import FileRef, SlackChunk -from slack_index.users import display_name +from cocobee.chunking import ChunkMeta, declare_chunks +from cocobee.config import bot_token +from cocobee.context import SLACK_LIMIT +from cocobee.models import FileRef, SlackChunk +from cocobee.users import display_name _logger = logging.getLogger(__name__) diff --git a/slack_index/models.py b/cocobee/models.py similarity index 97% rename from slack_index/models.py rename to cocobee/models.py index 060a7ed..94e8e6e 100644 --- a/slack_index/models.py +++ b/cocobee/models.py @@ -8,7 +8,7 @@ from numpy.typing import NDArray -from slack_index.context import EMBEDDER +from cocobee.context import EMBEDDER @dataclass(frozen=True, slots=True) diff --git a/slack_index/query.py b/cocobee/query.py similarity index 83% rename from slack_index/query.py rename to cocobee/query.py index ba4c701..66aca4e 100644 --- a/slack_index/query.py +++ b/cocobee/query.py @@ -5,7 +5,7 @@ import asyncio import sys -from slack_index.search import Searcher +from cocobee.search import Searcher TOP_K = 5 @@ -20,7 +20,7 @@ async def run(query: str, *, top_k: int = TOP_K) -> None: def main() -> None: if len(sys.argv) < 2: - sys.exit("usage: python -m slack_index.query ") + sys.exit("usage: python -m cocobee.query ") asyncio.run(run(" ".join(sys.argv[1:]))) diff --git a/slack_index/rerank.py b/cocobee/rerank.py similarity index 96% rename from slack_index/rerank.py rename to cocobee/rerank.py index 1dc5672..8769f1f 100644 --- a/slack_index/rerank.py +++ b/cocobee/rerank.py @@ -13,10 +13,10 @@ import torch from sentence_transformers import CrossEncoder -from slack_index import config +from cocobee import config if TYPE_CHECKING: - from slack_index.search import Hit + from cocobee.search import Hit def default_device() -> str: diff --git a/slack_index/search.py b/cocobee/search.py similarity index 97% rename from slack_index/search.py rename to cocobee/search.py index 15971f3..e3dfa53 100644 --- a/slack_index/search.py +++ b/cocobee/search.py @@ -8,8 +8,8 @@ from cocoindex.ops.sentence_transformers import SentenceTransformerEmbedder from lancedb.table import AsyncTable -from slack_index import config -from slack_index.rerank import Reranker +from cocobee import config +from cocobee.rerank import Reranker # One source can own many chunks; over-fetch so that collapsing them still # leaves top_k distinct sources. diff --git a/slack_index/source.py b/cocobee/source.py similarity index 98% rename from slack_index/source.py rename to cocobee/source.py index c3ab7e7..4bef476 100644 --- a/slack_index/source.py +++ b/cocobee/source.py @@ -16,8 +16,8 @@ from cocoindex.resources.rate_limit import RateLimiter from slack_sdk.web.async_client import AsyncWebClient -from slack_index.config import WINDOW_GAP, WINDOW_MAX_CHARS, WINDOW_MAX_MESSAGES -from slack_index.models import ConversationRef, FileRef, Message +from cocobee.config import WINDOW_GAP, WINDOW_MAX_CHARS, WINDOW_MAX_MESSAGES +from cocobee.models import ConversationRef, FileRef, Message # Joins, leaves and topic changes carry no content worth searching. SKIP_SUBTYPES = frozenset( diff --git a/slack_index/threads.py b/cocobee/threads.py similarity index 89% rename from slack_index/threads.py rename to cocobee/threads.py index b95b6de..571f7bc 100644 --- a/slack_index/threads.py +++ b/cocobee/threads.py @@ -8,12 +8,12 @@ import cocoindex as coco from cocoindex.connectors import lancedb -from slack_index.chunking import ChunkMeta, declare_chunks -from slack_index.context import SLACK, SLACK_LIMIT -from slack_index.distill import distill -from slack_index.models import ConversationRef, Message, SlackChunk -from slack_index.source import next_cursor -from slack_index.users import display_name +from cocobee.chunking import ChunkMeta, declare_chunks +from cocobee.context import SLACK, SLACK_LIMIT +from cocobee.distill import distill +from cocobee.models import ConversationRef, Message, SlackChunk +from cocobee.source import next_cursor +from cocobee.users import display_name def thread_permalink(channel: str, thread_ts: str) -> str: diff --git a/slack_index/users.py b/cocobee/users.py similarity index 94% rename from slack_index/users.py rename to cocobee/users.py index 0cc1cae..b546ffb 100644 --- a/slack_index/users.py +++ b/cocobee/users.py @@ -5,7 +5,7 @@ import cocoindex as coco from slack_sdk.errors import SlackApiError -from slack_index.context import SLACK, SLACK_LIMIT +from cocobee.context import SLACK, SLACK_LIMIT UNKNOWN_AUTHOR = "unknown" diff --git a/evals/questions.enc.yaml b/evals/questions.enc.yaml index 6eac09e..55925c5 100644 --- a/evals/questions.enc.yaml +++ b/evals/questions.enc.yaml @@ -1,15 +1,15 @@ data: ENC[AES256_GCM,data:jQOm2pPLH5Cbmlvd21T3KBFasl/baPgLE+wja75PaGAfhIvUSRV1PQEo10fBljZQUqUeekQbQr2A5lhzWBVr7wdCMj2euOrJJF3OhJSWZ/mkjhgQP9IHB88Az4eD0FH5O4h1Zbpmj7nOrsLGeZ4mswriJlN5GcjNrSSWTZ2ds3NB7dOMKBbxALJpMMqYRxmU5wkkdzNkEncb00S2FOurMbNRVwXuLkl9UyNWsGgWJSaodaQ4MfubRtLRzzDk/Um/JrtPijc04zLmljBVWC4xoO/rmej3hQByD67dSc/uF45Th07OSj+ZXU/dzhiUoc1mVDSZ7XrilbL+fNzyKJls0dXFg0+lATLDNdb204n1SuRtT7cvAaHWlAxcRB6Q5j853/0GrulTxg4kiq0SyGu+MSOCHfAePRlTxLADUoTC9tznceM5hpaf7I+u08+axmDs5c95URgQmT4orxEVC9kMM+BAwKgQN+Jq8BHhqfYlOFLJ+H66BBX3ftyErJ8Ij0oMFiM2ZuDvsdyE/VaISQtq4d4ekzk8Sl9BRNnVuuPJSPxpSacf8G/REVwwRLi5vpAXfiyQ0mUDdVOaLLP0zv5JyJV5TttDD86zCg3JJO/Dtvld5rm1vIT3Up4nNwhfW6OouMpt2xPWBm8TyLyFjOboNQavbpEl0iHJUteRDheWZM621mK7eK1dDwxgZyFP9trIhpyWGjvDdSROZ+ny7i34+0kYcwwhyiQfb1n/OVp+a5hp9x6MHu32zDjLXges93y2y0Fhflo9FOlUFB9qyuY9fIPNeCX1aSXjMHcVpg1kOvJRW7J31NmOS8tAQrb2Zs72CVPwMA58H3hfxM6oCfQ1TNjXlJ5RU6F/yCP0rCxnxOmkS4l/jnjArD/Lg6BDjRw8/2MHWD8/zIv97oc6/078XQiFJDUOIb16U1ALFayjwN+/SJ5rrgrCl/rRiXmRkMkqgHF5n68XVwm4Kou1Jcb9IjC7eNjl/sB/iDGAUCO5WW9gX0cihLLJtyRq05nXRM3caIOgUI2vYCGbqwwdCyjYuW+RjB8934ACpR6D+9EMQkfdi0xc2tpw+EGctPAaLLdAma7I9DdVzCyhPuGSbA5UA0w4U30iA4xZctHWZz2eex9LAuPndwDPzFaCkKeZaFesZlkz6ubxOXHswFpyUiDsNQ0f7cAOhr0uoRQS/MMsskDEdfS591Q/BuXYZaA2sKyFyEiAGh6FLU9QuI0VJu++8rDcO1SpEJFeTlEU1xNPDId0HvUitURWhGyLXeZ4pLpF13BzRtCcNBvVfldw0EVg38DUa4r7dyyWmoBIjXB2hatqoXfI7BqqMKdqUNF7P0VmpMe1rITE0ZstMt3rkCcSH3Q2zPO6lwgrSo5KMQPVHszGJvDY3EeTnSqo6gUKH3FPxid4ECEGzhHJSbPO1VpWawFF2/lbCP3j37m6IymYs+m4HPJtQzbxQOtO6I7lyGSPYOw+caUtCcEFYxHbx1KFMyNMyJ0QIotzUdRIVcw84c7oIqurb4lf/G4Urxk/BWpPx6NnQ0us3PKq+1n6YAjZIjzPoGZEmLiNoU9pKDASMbRJ+t2soT/CE95z8WcXQ1qPPpfAwFFggnQM81HnqdCiDlEpwdxv1QsQ9bRUl3Njtad+M/CdUl0s+C4k/8vD73RP2aoRwLo+M6rq7RG60Tec1zPrIBXgyEGIYrjZlhHN4lWFgKgOsE6JdQxGOy7zLS+TQAa86C1+ZqqMKqFdXrM2W4DSsBvwwYLb2agN5/s50tAuI/FhPcxNg70BZjfgYe4Xg1iIF//lgrjzwKYEjhXIbURb1xzXS8DhfO9J/4A62KfvrX1rlQuJIm+QO9qOAlxFZWnl988GWIZ7eo6r5XYoBQR8sWgVQtZEm8kTHjL8Qj2d0IceGW2DxC1wxTGAQ1VRJr78KjqICPUtq3WwOIJkRt2yGbpdXss5a7L2hGNdkKi1O+vtfEq7UzE70leEV9t0UBThTC3zhj3MKkS6uvI7Nd5zG/2PePO5uXzHSZyXIy1SPFloFx9QBgMuL7qvsFniklhQKW2mQgB1zuTu9DiTGHU0mup98YM/YLqm3yWgu0pWV5aalWgMUbaufluonNil24Nzww3CwvAEA6tjR2c6aumT6n9CARN4bWlRsmh9DhWEzTwAn8FZGS5MFjp+r1Jkfar79mVJ1njm1dhfYgos0jsM4CxRoQto92G80o2f235w0Gp1flnBn353Z50FJiC3/V+wFF1Y7XUfjGtcXQCg6vZBjVk6jg4J9M3brkJgHX+VERF8aewLvrn+NyhjvoSIeiUbTABTwXs6fbjyIO6uT+9MQrC8JNo/uyXGZselpRj6EhAaVFTbEIaXbkyg6x8mPnsVgwjqVGIughoEROGFNLYG6JeHzmvn3XS10sErvKrfBEgHYSJuRdqGLFgJLGuK+x2EqnyfMUQpvnTh5mnPT7+NZ+iD3/VfKBUohs1Hp493Gbgw+fRPJ9o2kaaGnVTy8N2SN7vo2Eta2QQ74WzHsgEVhVFIIZhLLrsAiPom317+uOuBlSO66rZZwjybHwd9bra6qjNIiVxTkthMys7A67+lwJEWkricSdu3SzEIgCRSlMkRmAkla0BYyCzfbCrp3quQTcz9kZ0mmFy5+SdO07pAWAvolnK249zYL2YPVJObBkVO70x8omco099dba8xKWVP2Xprdnw4zP7sU/lzlwfmuJZprqnJUMwCKGuqwhsClkJP527P1G0OewKw8EUxpr/a3uU5HXZ0U9SC5zFxEoFtlcKnVYfBM/xFsyFmPzZXhowrX9I8Cg7eKklDjhcT3b/gWYEiIR/SnzhGelbUBvCopSOj/uEPoOVn0ReYVSpGwX8T95QBQCUo7DeI2WhG9guuy2hRSbCjfq9XxDzRgD9iNe1IpHVYPvEhplxv1x+IuiaZZmAH9DcJrVNJqxFhd9C65xXOfdY2ZlLLE2khILUpcvsoWPC7mSHNZUwexSQwdMjowCBb5qgCAKi/yDj4H7C60epYtqL4RsvbGDNmw267wEmsOrGrw34DMl1C5PFawia0vnqJdFeloZrdOqlJ/ANZQdoZaf9GgPdyGn5iPoUzU+Sey/XIx+AS69F5X8qBcq0y8e9qtm/QLEgKSdpSopJkygiQiovG8uPgTu5crV86AgFPKKFAp5cSudO4eizFo61q26DbjqdPmunvOdZcZ8XNgzO/igCQk8KLFiQvtD9fwIeQyHfLV8BbzGLndEvzCzuVNmDeuj6jIUBO5wuROH99iO0kudtzYDMcJF2IXLuQETwOV9pMllMAvLujuIU2qVDIvc3osGaM+QssFL2DxQKvRH4DUoAMZ+S92SKRCArL/dXi6AMCZ058MQwXKF5W51DPRa/HWa1ehWkkaGaBbgKWdBHhp6mRvwmWFo2M3c5izMUiKzfnXbcuZQadzlElHTm/gxvcTiil5vUyqO6ctnoRTIIYYITuCSDNgtbPiNzEi8LWZ9dxPA1lFwHkELOVSrNWbHvXKIoWBCW+ocQD++GaDTBIhrnnbVYa0Eosx40oMsd6NRX2iB8jDh/HsfF7KcBwE/FJRq35QHUsbAq9p8I0LCH+emEULdaIFHK8yL6miSoM2QB5I27R2q3cRrnRKIAcrGtDfiQFTtigz1OVGCcGsIISexi+A7Thg9JSRoPdXFv2Y3xFH4N0rURUzlLRo1vmcfNRwVzZtB+Z+bH7odZyKHO3Q6+Z6U0BdUiwiN4SnR7JnLzhCxzYPizcHM6m02bUFsbRae0tca+hs5PIxvyhcLLVPwXIAavNcOj2Pqfx+rlILfJh5SMVD3cci3yYmKRCFoZ13Z+6LRaiFHd2krAxpJpmBTY9cr0LBn5svN3wFSC5wUQxiFhIlrsHaF+y+wXJ/tcWq6qWJEPJz0Po1eQhHDVBvpVJO8J6bg/low4HRB6+PeJQ7IgtkXT/7DPJnlhU5UG3SBm+7nip3sNjgD/kRydo2jNJkNABBnrqrzk9TvXX/wdJoRY9shNhSqqctpaXegglB2jTz44pNCxmS+ip0N/+sqnxaRedEcLgXgwpFwPD6Z7At/eqklm0jrnlAKW01gPzi6rFzvHuPOQ0w1iQhGA48dMbRLK/adqy6TcZBcKKjz0jtw+K9HNcSWXMKNru+AdI2hbK/GkLyZa53awmOYv3sTU7sFbl47bDjOkmVIC0ROKEBXS8oMBeK2AIlfNgSrqrtZXS9J7dSjAWjkN8sQVakf7s3ANuNGrFhQO1OOJX3EyVVhyFwGIFhNFFl/gjyN9Eut3xbCNClLMQPLVRwMSLCUvT1eFFCVZkJ2d9XGl96Ccf8rD0AE/tPJibM5vJYje3q+fhYuKN3t/AYqVr5eaBSrIuYyKiZFGcDcMQY2agzc6wM+VnKZ1hosnJeV+e07uBhFdCAuCcO50c7zsw2u7r/8R/xXQNhSDfUaPw42rMemx3nUgAgg2OL57zkH7a0yR8zII6SufY2EHhMnw8LMK3kYKPLhasAwF73V7wu6hkR5W6sCjy4Mr4fpaf5CHzR2ioRm5/w+Faz/vK8QrI1ii0eRmAN/UirXijsrTdsva68DetR2rG/EhUzdWIwKfkXcjI8yIsA5mdkh71pS/YPg4m2tYz5jwFvkC+/MFhyQLtsD2ANwTtGptdaHVf8zMslHKsFm8znY69pUDovqGjVAtAcEnzHmzIHiTVkyhi7Q6+r5C2GQc3F8VukaqUeaoTmDFKXvJ2CGKpFtQ2vpfPic+HeF46upSjhFBFabi1Nm0GkFWhsEIitY842cFCirMhG3ST2RYxgZMX+7aAl8yxeaMFZC5D1x7Km7EbypWGlIrYAB6hX1nTR7klHvCUDdPNO/w8+VqgpbwurnV0/O3rcoGlS8BrDFBCHZYP3Ym5KlLNthLwWR3+KzDW1ITCRks4hY5s9WeYFe/Zz/591gIuTXDxraEic6yObekZfNW6QNC5hLiha6KBLZrQXSCq1zHjwGvspr8SZN6PomXKRXQ1p5Z9saPRd5e92F/AY+2sT9uGQVsFwZ6Eh8rm0BLgVlNjgiWx7dWZoI6FFyWZBpzZUEBovf2a5iuIxu56h5ULoNtyYo7jlin3VQsjxkk9qxWKCPwrsWLurOtb+9skV2w2k1FbrwKDHpZCbmZpPoZe+geIhK8dALLExFji2Euux6ES59T/3fO36M7AxRd5IZ+ODofPH9QygclRarQam/Nzk/8cX5rFvNkqu1JVsekUzeW8sno7kfdPWeLHEF1/vjADOI5NqYWWEdNWloWArO1iO6IetRjvbrgwDropIBy1c+z1/DKFhjIcBi3K7Vz/2tKTYgfYS9YSP3W/r86nyHIUKOdlLC18M9xa+6hQC05V3NXmG+8ol+TTC/0jjJvnQOTuQluH8uhM5b29MIjjbUdPGXorx+res7xjwxtd0sYskIXuJoDWfCa4s3ene8lncEa2IqSe/MbCfKqYPcmBmgoGaPWyn6jwaUG7al7Wv2H78pSVIcks+t737ZiOebn5hls4v+fiWaREXQuwfetvju5DA6hywJmLzPf5df5IutMv8uZujhzd+FYKEsLLqJ35We/kpBgMAxPijRO5JZdYvP7zNzN98cMmjfUMSx59p3O5io9fg5dBp47QxBeSo9whWucCRcS7vKel6gn8ZEqzusqdjkSXXITt4kvYppSRaG0IW5ZiIoUh8s/o6Ir9unYB44hRMZxhIJsFtwPv3qhzZbBQuuqjmPcjh/9IOvHpsUCAJu6O5+BIOYoS9g6VJfGR2GVgTs2690862XWPkclwGSUxUmi2aiQgEGFtY7zoMjNCnKHkENVQMm+/FDrGFTD3tda498f5BmzgsM1pYghrmP4LLsBrVUc/ng0FfwSOVy/5UEyRQAnhlLkoMUYor+puJUzcLXNRFfh6w6oaV6zMr1MnCoTP87Dwo8VHzSmt/wZhUkhhFQvoWgRBBYPbJZiGsZnwQXGKn3m/t9Fqt0HxKZb5ucteJwqXX6UeOetlEFLJiCvSJBUWw6D0JbsPNvSQPJGgCmxaUtp6x0D5/IvKjjM8lo8nZBw++cF+ycFo+5dPq7UiYYO2X2gS/RYTLWcdWRmIbFk+VnBVvMkJztjhMvvUoXE+0jiet84yReASDqFRH1s6lHsPfmPz+PJE2dudkjEKZzSBr84WcWf4DsWqq7yc8EERTPWfMVQPQmDzL6Kzf5dlcfeTZanhZaM165jJcADpI4aeLShhJlTPiSYxEg6+cvk+T/zVgQmefYQDhSABDKjzRk0nEwjVjOEV9IgJb+YybxuHX6Szs9Mguzbr3n+Lj63UVYmSjBJfuW0lh6acnOLV+7mPmZvgTEhA+hplsNqqufBMa+hURBXJ118XYGJ9v9JoaUuXgRJFmAnddtf4TcYo+7vOeBfizeCELVBmSL5s5KpPVx340KujHwAe5ZQsnDKHdHamHGRaZ7ZpzNJtBkcDlR+EMTbPBzM6tHuGkVZDzbSpID1+rTYhXGZPWpURHvac7C5oPylfJ3Yu9LplpDThUmqWegIfQqdPVGyPBLEdNct9UsCPxqyI0IM31ZueWJtK1iSx340OHrs0ybDV78VbWlB5bxooZWaN8O9JlOrplpdsheQ/AWQUtH2s87YymlY/uaTfw5SJmSAsbyMMOG2pecu4OC65KBp/DEKOgg9L6xtz1ucbPf2ltH9bNE1pZTRh5zVko184+T4WDe27q4/Yor/5iKbo9JUS7MUSDYHKZ/03Yi3kWVPbE1eyuWXt5B3Sf921MJ/OX52wD7wl38cQ76WLJ/96M/a6OZTFblHwj4xqKUumGEiNxg4qQQppHRwkrTd0C9DFHMn2hDffD3wPRclssUR6UdYkFNAoONqf1urrdvJ1HNRMAb+MKcZVyVz2WiiNjIeyNGzwr8GDQdn9zyeAWn0sKgEGVbX4YyxjHGVxiBk45wBZP3NZkXMK8PBgpjBsDdg4OuoBrvds4wDR89Tb52PqcDQyiGP07wHuH8WTDl33jDFiLraFzDNiWMmVJnveabwUewEb0wN2yFg1+Y3c/NxkQ8xvxY+1NsRKDoE0e+2tOiHp21yvECalpsn2fUlVou5OglKrmxGwnqSSXHgY4+9V82iGFKkIozhx4N5e01inBg1598OIHidpc8LoDSH2ZXeK6UXLrv2UxiQ0gPmiSfvBXFXuLLZa5nHvLea3+GWltenPszWu2ZwF69yIlYkBbU4hay536ZZ1mUV/VLsCD599r60zmGzuXQTLn8//1CMIffHQRyJdwrCXbVmJtLG4BjeyfJhXzubXF5EIAOExJZDE9lYSBVLdVXmgj10w6N8c5SaXAR1KKDztWfLTq0GuwC6iKTBAjGQeNsTv/oomdtYDI5f9BvohYf+wNUZDlEhjtOUyYCasVJCxDSCnNzr3+DksIeMtalfhalPGwBUcXfnBTuAOamCsOmb/eeSvR0KbT0H1oDVFjT7XEZClJebHy/0nARH5mmTYtVuGnZrX7cbUtSckWLuu+OGIpY9fB9HWSkKNS5IFbGR8g5zQ0djCj7IvTEOybleJd6C9IHrVWo/7yBDjYMq3KtU2PipnglSBjImBkYYRM6VPheDD0FqC4Mccf4vSPAS4OSHvYODwpty8htpVqgQs3k550uSH9xl3qxrBmT7Ef8YiM+Hu3ONj/gr1SQ/X2BHpXpSfUonO9IErL8mjBPPvxYEGFPApzZyHkJ9VEfX9V2cohFQ2yL7NgC8js3MK5mOCpoLAC4dldo+ZsVhUWFmSVjDyoy1mBdM81UOIrKmxLnjiXWcjh5TsEYqxgU0fibSd1r3qp/XMXwGrNq/wsEcbJn61ualUzUDMy9jkOJgP3J5mneBGS7MoYDYK+ykBFmMXs+yfv5lSoD53myQfO2WW19ECBJNQmlMh3Bgf0U71sEeZwCVv27p+cYCTFHZXB23+vK9+YutcX7UNFL+gGKDl0ZC2+HHdpns7+fp3B0xFs4wC/DnF7l1U2+6kVZC2xU4Rg4BGVpv2huvq8xsIdIYbH4m40Vkjbl8uCErOSIGEstyzDVsTwukRqHvQmYMLA9WQFNigXezgSQCx02EcT7K19LOWBzVR1F/mXEK9IrZyVzwcrbdVvqds/MCkSoujF7WSqDjKIyEav0haw3uhYcD3YcflRvlgt1ZoNKwzj1nvJGQwqKBLwP6bd8aDLy15LzIQnT8JpT65upyum12fcEVBdWdHQM9N15M5nuJdHVuPs6ZYCUpJrsY70yjuPo5sKr9CwnnDh0zKkXE5NH7/OY9apwih6QNI0cSZPz0jpX0QSWO1wBNtdJ49u55yxZG3hyhLgCTQsHSnqhlrKoGRl9HlPuZ0Vtv0LLPolsCN7yNzQoT5ooEUIdVG6e6JDL6Cob+6DeyaF50Q6nHWMzznOg1RY0qXpT4aU9dBF0wqT79MIVA+gNKthM2H7PLUsdzx4r9s8XGTdS26bVH3vnIJsiWWZdAWTEFKjOmuRPsfY7fod7AWClk9Vu53VGpsW0R7+OSYZmLGd4hQ1y9sN/ovQBxnxukVFDXL1wobQI/A5dd4pOGK50zMbHOpcXfSao/HCMOQ98DmVRAwJ5zh5InJQ1FjjKGQdzqPsG9L7AjTKPjtFZvB4CqBkc4S6p0XG3bnI/P5pC89sJ6xYOMJUZpEwDvUWyMC0FjFlkvktJZyr/4TsNY4tWqZSwLimqmzzvFlycdKfpSHQWey78regtQUTmdumignwW/PJqvXB80BlZSaCSln7hRV/REAf8w7AkQUfIDbxGuCrJjn7Ioom/2a1gCNeBCoTjGSM6npMjcwBhXlQHHozUAQ4noVk1zUrTQm0uc/oKSHOM7BGDvT8eHQ5nCQNPbnc73782kbAwpqvBqSN+d3CjBmQyao4ZGf+lj+JESC6z+LwlL1FH6bYwXGxFKJQIqzDLKBpAtL1hX7LmhKgUCkjiQ4qRrrH1SpIyEyok7R/WvujwGsDuVfUrezDrWlQ18mmgQuq31Wc0NtV0zObLAuTgG3tNPungHehXIKC6OZAwDTz8tR0zACBmlfzyrHe0E1N9ILrvpZ9/H+2SRSjmN1tev9/AYNZCgCO25C24RiBN1iFrYLKvoXywvkOvys24jnJ6lRB4Z3fFyPoKKdkYhz7zhvzZPPwUJzsRWU7BBPG22FLAuWXFZtEzeUzREzVezEl53ebsNxC5A9+/2XTTUBYfDDIwFabbCxlIxc8husKszSPGFjwBlD/6ixRqKFx7jxW1lW92qVZD1E6b8jOhrHpyovL+ou5FZ1hp2MLOp1XEnGlZrfwBmQyzUY8upowwQV6ze6okAde7pQLPgNYk1loCXIf2GoETkcHyVX5rtO3g1QlZbaEoTQFqjnVu4wprMJXM9I10l4FWq/ypVSihwU59ZdGI6mG5RdqD0VAPbuuwnrl3N25Nw+NjL8iFu1FM7Mg4qGLT280zCF+XPD+M5RGkgm3n5JHb2WbsCgPCIJCj8th6BbAAmmkuy7oa5cJinslkM+Hbi7yu0/mgaDro0CK9u30G7YMMNCXbWnOaRRHOwRe/6rYYjyOb3Ev0aYAK7eywlE86u0OGjRDYZvtnG9p6lOy7soOABNONFS2wb6rc5ihzY0fUGeNpSAIFLF4CZWXRI7kfCaVaoJAGK+WhW7lipRXwka0Zx/Gvb5YcI8Goq4Q8bFJ9BEjEH+i+ezX4DQUC/lTL+IqGMpvDLIa9WeeTx14vWVslJnOfgxQz8hzASn3y0TIYMmcn6MlipLakqWjUx3LL6OTi8SzND6PE5demhCf5MRllziczVU6HY+CYcQ22X3Z6LmkIa7iKRYqyEUVHvDBKHv8yg79y51mjlQph6GtGigIZ8BpJ2KaxbQNEXuZKdcvzQ3w/rPn2mgJxmOBs44CCeIGmwL6shNdm7ZcpMqV5HMOD82n+irWbFQE0AQz7UtHLPuUfLNx0Yp2fBgIr01sQFcxpn2oxEZAeJIBh76DvtivkE66NUy4oODXsIVbldyvnQJtuZCnW3zpj+c06amP33mRjqhslFLziXc8UNo/dAIZ98bTIupucY7Jq80jJ9rxLdVxpAxCwY3QwaqxWZxqgnAk+mCdutHygpZJbGU1jX2Krr1e9UZ1gjD7jkgw3aEgbWrtRC5VnJkDMTvhk+k9vZOFJgVL+mNliMG3/Kwk4QWKNe3XZzYNxlPo8r5j/zaHZlpYS3aRYdFqGVvfp9CCPGyTXiOxNJRGXb6Jtne8Gv6u7oLMTWV5spXZvEfT2+Nll3++7kho2ros9hOan2KnsIQkqEdShaocNQtHDQG+NbFX9RUF5kCf3qwrwpo3xOZGdgBM1h49v2TD4W/EB3816ALAfU4Y6mFbBaPsyGPOljFoRRuj4ALI+d+ix9IKn3ay+mzF7VEpBBGyY9PerleUqQfRrs7M5STjaAljiOTNcicfgIMQ9InwKaT9d1guxvZaH1snJ9rIFqVz4E8EOowvwEI9iqoN7Kp8rZG4kCDj8Dbox2HfgV1TkKRMzvsELgf0dUWBwPl2yOgnX5mNld8GSIRZr5QCUlJpVfQ2lyID8StrgwaWj/AMtBv3wpHKRT95DSmIf4QgiMxQHL8DrS/5drBPqgwtlRJs4m/QkxHHBEB2k8LbXIpCrSZl8fBQCJyJOekBibIklbHLA3a7fezT2ElFmUN26UnOCH55BJa/5476eLBVfqP1YQ4y3rPfWOl2UIeNuDr1Le37Q+yHrkv26mrZWWOPqQxs+KTagD/G+x9dxDWFMCGnt7Qv95UEDTwGyjO9YfnR01COigdigFyWUDvec8kAYHh1yt997wjweZEUHalWC7sIEa2wiykO6l2MqHHUTMMFrArM81SbE/b1bNxJP4elB1vToQdFMygYvERMqRKjINqCdNhFGERQmIfvoYwiIm5ikO032VXT1EqwG6wkUoQ1AtjAUHkOY3ARptz2Z9XvZLnlN/8dA8sXCwdHjXd6yzi+NpbRvrUzvd9xfzTzC540kGn2Ksnb+ECldEEITn/Yen/baTIrmlK3Iwgf5VYO5jO34GmXUTr0fMaNiJDRIi17Yhkr+Gol9xfoGTGy5a2+277ocWKGFHSB2cLJOV9SjI/TGcTduCZXEsQHsRDiZSgjwnSy9aDN0pz9CQFeDmCP6BS9EheCN7z1do1vwEoBL/z82wvZcMtf9GRS761hie/yrS6fveUbEsIwJqarlK6FZhVrk3czTXA0lgTWcmB1TG5rDkaGzZYSYWwD+K9fzpRveHsvBjt5CHSYDfVnWWkB6nZyaVoc0l1Z0Z945AuNNClDgIYIjD58h5QcVOe6jOrDLzeekfTyej/Mws5+PWcjstXVQYpQHtHbup0FVZM7SQkUSZvz5oZRicS7FbcvzNEbIBq3yOm8Bgdik8LMTGA4quUgXmSOmSJHeBN/mX2FP+44a2L0vhclodk3Ec74QnR0DsCyr8LGjStgwB64vdMBmt0hE1mXDo+NeJdPTG0qB/0GnAy/eZW5B3tkJ+1snZOUgIJf55m3KK41jnWAT9bGb9Vp8fJNC9F314o0O8OzQneIj0+5yJ4kZPZvrITsIigJzEB88FQPhOV1c5x6ssJZrskpYntpzsUReCeoUgmRSeIm6Jl1RWVp1DSkjSSky9rCU6yYpjXoQFLL1GI5jpx4aAa5Te4quXs3Q1jYqP+PzhrjuZMr5VdMkZccDaJezHR8kRIbc2Q34rOkqfWRj3sqOL1EgvW6yFlJQt6nj6ISwyvqxdwY5F8Dpg/KIH5Nd5RA3s8F5CdlzAPGQ4xjKkaLd91ZLg+b63UxPKaOOInzyE7BIwIOIjjORURvxMCFFKL2DY12irPnxEl900/8UntEf5XTZZYKJsgQC/qeNCYbPxaNBldFWn633hLrAz20QKvzLTIoPCFBl+ppl6t+oa4XyDKxqtMCnzW1dgew2n8/ZEx/Av57YSOvd+q+Was0oU9679042JR/n3XqV/LPgegjEunI+fUs8ZmTdsJ7YH+Ptjs2242d4R9gvddlQdytamVGKxOvsN1en4Eldz0GJ88Wt6RgPkzeZHz3zwj4R6b2GQy25ymSlHh7I0cEEoN3EFBTeUqPotLE7oG1cDUzZ52I5WlGrUyLlwOfZTNIBDWrXa56oK9qh1Vy553sehevhYPmRgBDi1ep57icypIy9ZvIVh51q/XnPXLB7KDVXGHM0O/heQq6GbO3E89D34s+86eyM7dy65gb0TQowKPo2hfhe9EUHQ/JQBawZjSujfu6OcrXJLldN4sRQ9XvniKA26zaVAVqoaN/mun6XRngx5Y+QaS7k42VDJsSnvNhRcwWa70cpzVML7H04iczmO4Es62tjv8iTbOlQQgoNKNkPGj/ILHiA92u8us7c+NSM0b1tXt/jGTrUVVCUXsggNYrLo2/U79OkIjrc/bp4/XTSChz7FDSQzmDHrDojq9ojjkXzK0VI6vxzZYgSrsU/39NuVcMmpf68R8xeWJDolU9R4t5W3qYy1TGfGO9NP2E3ld+VRBt4gNPXO4c3U7dAf9FEK/MPR9G4a+m40VrGDMY4V2RPkk7g8ryCe608ATzd9yJCne9nKjO6v7mplCJLVnwmxWBovMVzPPMSCtaNoAcP4bNANswBpc3Vvg2Fa+i7dUMrif3KG06z1sK+sKzXv0Y0k4Nw/I2FTPEJ3L/8C7P1A0Hsgb0OY2vbdUu74HLiUeVhczBv/VHTuw6xhnsVV/AMfgFUSEWglRHXO7oAQ5EJl03EQiOo5P4IG0/LwYCoo/JThcpN1f8C1T1G47EPtNzardmTdokZK9uFrRN+eOX8PBlIm+tebIKbwzSsiFvmzg1CtvXJlqw7PIbkmlGQGiVuKBI8z8dsZTRsZvMRQ+rmWpiDe0YULA0UcMns8iNbv8HOxUHWli37Ij3imsOv5Gndzz0DqdSI1m1KrLDanVHSo8QrDrdQApSnKvP+86q65qRU0uxRGwSQISwT5zP1+ST3IgmN2lEmEKbyFuhW41az0qY9j7gl3CCLNPpLWW3X7+GMrITt/1nifOQjqbUpH2BrZoQ336IAMe9uRXtqPjHsjWPXrQ9eRrEhgIlB576jd9aKcgsEgElL80gRE4AWxozo+hgITS69OeUI3udnQ8wCNoBYskplfJJupo0PdrGvVo4HRz6efbBfnZIF6gHHH8+fb/JP+ruNfNSnMPNumjUE93q7nrfjX0yusTE3jny51um1rUtvflCCxFsxFcJsgbe6HTltake6CMaxhw+Ux3G/GFct/K46TAFHj8c9T8K+bwu7pCKBNvXZIoY6UBTAAA2MouXJw2+F2AtMAyM9KmyxVUQXLc/aYS3c3/x1W7BWSepBF+nk/hWN1kiofIlf79fSjME8tpFxUckuZu8cxO/UNQC6qEYByZigwoBR7Mbdii25kK9/ZhKL0bRJ/FmUNuo5vNKNekuEKclJtXR1Wi3V8Ts/WF1+unrjVSUfjachR25F5CDvvKZzW3ZyREQH+mBnrq82oB9pBaG2VyrW4B73fSKt+odOOrzKo9oBkX7oWeh04NMWTQmeHINbOAQeBhEYQ43gCg3Wwh2fy6BMrqNnHADLjHrNIjs69Vep7E7VK220xIZFRM+OCVyRH5H3HsPM5S21ui9Vi5/1bFtFlQ4dGzTkJ4TB3cCqx2qH2PTJGQxQ14Sl1ox3egSQdakPMyvegm/QHhZkJY3kml8I23trTlvfW/I/xWWvpkKpkAAM7o208XzCZW7Y/17nc2jlAFHKXiWT7um7JQVfE3iDhjE7xGYBWcRVocdzdio/NW/qJB9ov5BcViLt/AfzPlajWQcqmifcUNCOvm3bNiZRIKq/TPR2ziiiXtiQ4Kxn7tUkTEgoX1C3VIGCpMapEwkkCt2Y9CC5CpFgeK72IVeWJYzgSJCtPC/pC+TzmWUC8a7e2QH1BBYM3oivRKDROv+IRB/ku2edwEN2HjGHdKklbE568tk8OpXOIarxcR/fOwcCYzHgf1vyleBfaDN4pbM0WBJxv3c+nk3/tQS744VFYtW2Wybiv4LyZBb2nj7htqnY/mw7FM32abqtCTZdYMlHqM+97Z5pM2Tpq5c6jCqZ2vfRX3N6LSMWmudWsEJxPFSxio7O6bUvkgcq6V0p/r8o+eOhTUzw9VRpQzRaisPYYIZllEmlrIgKcPifCuW3v0vLbZxkBZx70uGxK6F0ZW6a2peLaT0ARAMhq7HmI/obP3fS90kpXtlkqRwM7U7rN03Dl9SYLTCgkTQQoBdSXas3c63oENMA1L9C5o4/5HTrfUFFzwJBstSOdefVRxALOYcrmBRKnkyqCm4MbRS7Kqe0xOg3VISfIRyMMRaV2CKiMmAJE94IgnLIacWGPcJ/2XfKaoJuhoXRf7GkG5GD1UbH7Tu91pxIBzW1oThb+B+XNjMyMmzza+/WHa1UN1po/XVKIGdMUcG3BelyXCiihh2HIrrdFb3RnFAhzlIQ92d8fW1RN82Q4kPCBW7YvYFkLlA7nqr0GML4PXXWJRWbJkdxNcMbHzY2IW1H5mBwYXLCksIHwCCX8ZS0ekEejqoWylJte++V+pAfn1BO+BsoMWam9he2t2qLa36qkI5d3v8Qfh5MS67emmmXaGQk94TAJvg0BA5+IXEehztQ5flAygIsIyCCT47UdCNC9JM8/1a++cV2F/OBXgTS4hVhGqO+OlSKUL3HhZxfe3XJAlYGtkWxcTGAN5p2XBli35eW+IVGQYT+qMI6sDCiw5scaZKZlzZf1huHzCO1s55/LEx8TINHixEA4rC5VHnzIh2eJY05hZkSpf1g1rBC+H6YlzN2BcisfePciAuQ7+/9EA5zRsmw6VBJboRziNGi6gAA/FotrXCbosP/OqZJox+zAGnOfAre/2HfYiOsI+GnG4gkoQfp5LTplq+0dRXw6hYNbUR8qNdTwC2M7FS5210tU2GF44ZctJpzjRsno5+U8cKwFTz+lN3XcGxbciy+6pizY+mY2yY7/TDQDmrJ6p6kmQcMRU44UpvV7WHpoMGa/Fd5Pk/sbgUXaOPGeYYf+adMu2J40IYbTNhmPW1iw8e5o=,iv:BhzkNDko9jS64JhDMjlyAe2o4M7xRZvVRK9w5Kb7UxA=,tag:HNniTwaqQZKJ2k22lLxhGw==,type:str] sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5VEhjYjc5SWNobm9BV0VR - bFU5Y2FhMS9GL2NFRWFBbFVKUFhDdnVVYlg4CjIwTEF2T1U4SHpjd3pjMmxHSzZY - SE80NXA1M0R2MFVPNTZiMi9ZcXZ5YU0KLS0tIHc3MlFQTGZiZVBLTnM1eklUamly - WmFiVFMrMVBRcGprVmlHQURQbDRGa1UKCrO5Fjn4EmOF2+b5kPGlJPaB93oFTJxY - nXPniqdN+jsDc5Z8uoCpGDybOtJn67wiwKZ1l7fniIVu3gAp7t4g1g== - -----END AGE ENCRYPTED FILE----- - recipient: age1730f3cxdyh56zw8xcvlmpa7u2x7353wu4u0e58kyx24rsefgp98sxehm6s - lastmodified: "2026-09-23T07:12:51Z" - mac: ENC[AES256_GCM,data:biR2CcelZsxkSaIIoDg1fnTMgaVfT3V8xE7SlbP/EabudvCPBOLXmuXbJngTLtUINV8WTDaTjqcWFOllCM3sywYXPfLkPg9auKos1t3A1a+825s/dnQMERN6UbCHUhPs9d/w1Uxnw4dbzCTVQY6i4hAqTZip47eVDJw/GZzJOW8=,iv:5qhp9bssLL2VTTBqelwsvBNgFuyLNOp/bfg/8PMpYIo=,tag:BZ6gGQjgWhRdLeYUSkuRlg==,type:str] - version: 3.13.3 + age: + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5VEhjYjc5SWNobm9BV0VR + bFU5Y2FhMS9GL2NFRWFBbFVKUFhDdnVVYlg4CjIwTEF2T1U4SHpjd3pjMmxHSzZY + SE80NXA1M0R2MFVPNTZiMi9ZcXZ5YU0KLS0tIHc3MlFQTGZiZVBLTnM1eklUamly + WmFiVFMrMVBRcGprVmlHQURQbDRGa1UKCrO5Fjn4EmOF2+b5kPGlJPaB93oFTJxY + nXPniqdN+jsDc5Z8uoCpGDybOtJn67wiwKZ1l7fniIVu3gAp7t4g1g== + -----END AGE ENCRYPTED FILE----- + recipient: age1730f3cxdyh56zw8xcvlmpa7u2x7353wu4u0e58kyx24rsefgp98sxehm6s + lastmodified: "2026-09-23T07:12:51Z" + mac: ENC[AES256_GCM,data:biR2CcelZsxkSaIIoDg1fnTMgaVfT3V8xE7SlbP/EabudvCPBOLXmuXbJngTLtUINV8WTDaTjqcWFOllCM3sywYXPfLkPg9auKos1t3A1a+825s/dnQMERN6UbCHUhPs9d/w1Uxnw4dbzCTVQY6i4hAqTZip47eVDJw/GZzJOW8=,iv:5qhp9bssLL2VTTBqelwsvBNgFuyLNOp/bfg/8PMpYIo=,tag:BZ6gGQjgWhRdLeYUSkuRlg==,type:str] + version: 3.13.3 diff --git a/evals/questions.example.yaml b/evals/questions.example.yaml index 2eea3ea..95e4aef 100644 --- a/evals/questions.example.yaml +++ b/evals/questions.example.yaml @@ -1,4 +1,4 @@ -# Question set for `python -m slack_index.evals`. Copy to questions.yaml and fill +# Question set for `python -m cocobee.evals`. Copy to questions.yaml and fill # it with questions whose answers you already know; that file stays untracked # because its labels quote channel content. # diff --git a/flake.nix b/flake.nix index a8a04ef..d6f6349 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "cocoindex-playground"; + description = "cocobee"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; diff --git a/nix/devshell.nix b/nix/devshell.nix index 5a43eef..9288558 100644 --- a/nix/devshell.nix +++ b/nix/devshell.nix @@ -6,7 +6,7 @@ let inherit (pkgs) lib; - virtualenv = pythonSet.mkVirtualEnv "cocoindex-playground-dev" workspace.deps.all; + virtualenv = pythonSet.mkVirtualEnv "cocobee-dev" workspace.deps.all; base = { packages = with pkgs; [ diff --git a/pyproject.toml b/pyproject.toml index 27a9d46..82a8f43 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] -name = "cocoindex-playground" +name = "cocobee" version = "0.1.0" -description = "CocoIndex playground" +description = "Slack retrieval index built on CocoIndex" requires-python = ">=3.14" dependencies = [ "aiohttp>=3.14.3", diff --git a/secrets.yaml b/secrets.yaml index 3f3d836..42ddf8f 100644 --- a/secrets.yaml +++ b/secrets.yaml @@ -15,17 +15,17 @@ ANTHROPIC_API_KEY: ENC[AES256_GCM,data:LjEV90smqXsLU1HOGD3YShEEmGalXj5cS3A1DHGRi #ENC[AES256_GCM,data:zLaA23xAd1sVwBsVXD+Dun1EX6bJbohsVXctjHHa,iv:7+p50PqD8qbz9RhuqcINFGZMHCqXeu4wC0ixY3SACE4=,tag:4YuSzP1jV1/DeDYHFFZiFw==,type:comment] #ENC[AES256_GCM,data:5VxRntT1v/dxvxPx49mhTZqjeYOpP/yAuxLilRQDsA2BHk6sdw==,iv:z8jxiqsBwvJATEBNX5jttIHIsKr/3kDJ1AMhIrAl4/Q=,tag:9Ao52YQL1WQA3pJG9mw+/Q==,type:comment] sops: - age: - - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuTGRTaDRKR0NOeTU1eEQr - NjNXZlB5bUNqR29qR2w5SjMwTjRPNUlpZkNRCmJsZWtObzcrcmx1YkRzc0ZWcjdr - ZkNOcXNON2IxdmtQaUtGVFEyM2dCK1EKLS0tIHFvajY3dVBzNEJBYW9oTkF4TnU4 - di9rd0FJTGV1TUJPSHRpU0NHancwZFEK48gfvnkzQoPgD0kQGrwxzYFp+Agp4k7K - C1vBUNEgRXrv0zpnNL7CChXKAb2zzfgGN9x1NOkSQ8Yd7NGjz1cfJg== - -----END AGE ENCRYPTED FILE----- - recipient: age1730f3cxdyh56zw8xcvlmpa7u2x7353wu4u0e58kyx24rsefgp98sxehm6s - lastmodified: "2026-09-23T06:33:35Z" - mac: ENC[AES256_GCM,data:PoO2ZUovKek6lSkQhgkofnn4CEoyAL6q3knv1wjI461JaxJ9NYSmdKu9jYlyQy/pC3OzVKtsNLWG8n5Mk98H51gY9NtVFLLHLlrIqyEGMPvi25wfKql2ft4AJVlTd+U8qTcDBb9Dv6rLgMggFl9F4YuVN0lb4V25+AnC2EFiDdA=,iv:B3hOWQh1IKPx0xLUK5usF1Nqu5OJzraTklzukCa3zZs=,tag:idVox70tlxxGQVqcyNThDw==,type:str] - unencrypted_suffix: _unencrypted - version: 3.13.3 + age: + - enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuTGRTaDRKR0NOeTU1eEQr + NjNXZlB5bUNqR29qR2w5SjMwTjRPNUlpZkNRCmJsZWtObzcrcmx1YkRzc0ZWcjdr + ZkNOcXNON2IxdmtQaUtGVFEyM2dCK1EKLS0tIHFvajY3dVBzNEJBYW9oTkF4TnU4 + di9rd0FJTGV1TUJPSHRpU0NHancwZFEK48gfvnkzQoPgD0kQGrwxzYFp+Agp4k7K + C1vBUNEgRXrv0zpnNL7CChXKAb2zzfgGN9x1NOkSQ8Yd7NGjz1cfJg== + -----END AGE ENCRYPTED FILE----- + recipient: age1730f3cxdyh56zw8xcvlmpa7u2x7353wu4u0e58kyx24rsefgp98sxehm6s + lastmodified: "2026-09-23T06:33:35Z" + mac: ENC[AES256_GCM,data:PoO2ZUovKek6lSkQhgkofnn4CEoyAL6q3knv1wjI461JaxJ9NYSmdKu9jYlyQy/pC3OzVKtsNLWG8n5Mk98H51gY9NtVFLLHLlrIqyEGMPvi25wfKql2ft4AJVlTd+U8qTcDBb9Dv6rLgMggFl9F4YuVN0lb4V25+AnC2EFiDdA=,iv:B3hOWQh1IKPx0xLUK5usF1Nqu5OJzraTklzukCa3zZs=,tag:idVox70tlxxGQVqcyNThDw==,type:str] + unencrypted_suffix: _unencrypted + version: 3.13.3 diff --git a/tests/test_config.py b/tests/test_config.py index a4d5914..05ba891 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -4,7 +4,7 @@ import pytest -from slack_index import config +from cocobee import config def test_a_set_variable_is_used(monkeypatch: pytest.MonkeyPatch) -> None: diff --git a/tests/test_files.py b/tests/test_files.py index dac2a28..4694f34 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -4,8 +4,8 @@ import asyncio -from slack_index.files import extract_text, is_text -from slack_index.models import FileRef +from cocobee.files import extract_text, is_text +from cocobee.models import FileRef MAX_BYTES = 1024 diff --git a/tests/test_grouping.py b/tests/test_grouping.py index bc93065..608e8c0 100644 --- a/tests/test_grouping.py +++ b/tests/test_grouping.py @@ -2,9 +2,9 @@ from __future__ import annotations -from slack_index.config import WINDOW_MAX_CHARS, WINDOW_MAX_MESSAGES -from slack_index.models import Message -from slack_index.source import group_messages +from cocobee.config import WINDOW_MAX_CHARS, WINDOW_MAX_MESSAGES +from cocobee.models import Message +from cocobee.source import group_messages CHANNEL = "C0TEST" BASE = 1758470000.0 diff --git a/tests/test_source.py b/tests/test_source.py index 4289ceb..90adb1a 100644 --- a/tests/test_source.py +++ b/tests/test_source.py @@ -8,8 +8,8 @@ from cocoindex.resources.rate_limit import RateLimiter -from slack_index.models import FileRef -from slack_index.source import SlackChannelFiles, SlackChannelThreads, oldest_ts +from cocobee.models import FileRef +from cocobee.source import SlackChannelFiles, SlackChannelThreads, oldest_ts from tests.conftest import FakeSlackClient CHANNEL = "C0TEST" diff --git a/uv.lock b/uv.lock index 0fc5952..90715eb 100644 --- a/uv.lock +++ b/uv.lock @@ -312,43 +312,7 @@ wheels = [ ] [[package]] -name = "cocoindex" -version = "1.0.24" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "msgspec" }, - { name = "numpy" }, - { name = "psutil" }, - { name = "python-dotenv" }, - { name = "rich" }, - { name = "typing-extensions" }, - { name = "watchdog" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/c0/51e837cc2c3ba6cc8e54adcbaa1d7fa2cc56427f912cdc9b14a190d6a632/cocoindex-1.0.24.tar.gz", hash = "sha256:4b8a37a8f3395385e459913615effcec2420a7d765713e61dfe7ee6a0aa40a61", size = 779913, upload-time = "2026-09-20T01:18:21.078Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/64/9213e4c849fda0598bbcbbaeb30c952a40d3fb9ce3b382b17e1e4ff9b9c8/cocoindex-1.0.24-cp311-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f0ee415663c3c82db2179bca468b2dafd828c65028102b7cccd649db75dc378e", size = 9530378, upload-time = "2026-09-20T01:18:19.137Z" }, - { url = "https://files.pythonhosted.org/packages/71/e9/8f0c4b2625ab0ad07d0bf2f168744488e54e3008099214f5213334c76ec5/cocoindex-1.0.24-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:00f588ee7de50c0fdbd44d619975c833b6f571cf2033ca6dfd8af33a2ac71885", size = 9618471, upload-time = "2026-09-20T01:18:15.393Z" }, - { url = "https://files.pythonhosted.org/packages/98/81/7d407f2bfb99e12dd401e666a4a07c39f04d68983bf6e65fe607a9e9bc3f/cocoindex-1.0.24-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:92fd3cd175dcf10d69a241c64cbd8cb5c592e23c54e18ff741270d07cd88d547", size = 9497723, upload-time = "2026-09-20T01:18:07.141Z" }, - { url = "https://files.pythonhosted.org/packages/8a/2e/8abbc5430bc39782446b142151270f5b9c3dbceb13bf96d81ba9f0ddaa03/cocoindex-1.0.24-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2800b0d9d56fd230b0c7fd56201ed7d5d3471835d0f3d48786a09cb05aeeca34", size = 9735628, upload-time = "2026-09-20T01:18:11.685Z" }, - { url = "https://files.pythonhosted.org/packages/14/e5/1b9fd2e01845411aafdaf50c5818357526af1fb75205f6102d769e6c047b/cocoindex-1.0.24-cp311-abi3-win_amd64.whl", hash = "sha256:63db183e920b760d852677ddc7ae960bfae339fbc7f55542191f5be1af8b6afb", size = 9961478, upload-time = "2026-09-20T01:18:22.305Z" }, - { url = "https://files.pythonhosted.org/packages/a5/6e/a5e4002c211c64e1210c47ed7dde5c857177a1906ffcedbba63a7d65a03f/cocoindex-1.0.24-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b669c7031e1c9422ba0b55aa2c75ed77c7ec950171938abb0107a31c052385a0", size = 9600338, upload-time = "2026-09-20T01:18:17.361Z" }, - { url = "https://files.pythonhosted.org/packages/4b/22/89ed6e6eb096348c03a1b24703855005605ed1dba8dff3edbee526bd08a7/cocoindex-1.0.24-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c7e2108e226fc0bdcf412778f95e1ff3ea919e1b80a30e63f46b79cace468ed7", size = 9491394, upload-time = "2026-09-20T01:18:09.721Z" }, - { url = "https://files.pythonhosted.org/packages/f2/06/1de151c6b1fbb0c7c753c35a8e2ea6e04a926ff7edd8c0a3c676f3846965/cocoindex-1.0.24-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:9196bd67200a5e74357ba83149b3821284a3600374497645bc0b84f024bae4b7", size = 9729406, upload-time = "2026-09-20T01:18:13.625Z" }, - { url = "https://files.pythonhosted.org/packages/be/a3/ca185657df3a379b2551a47be3809cc10e8bfb8358d4d31ce0b3e0cb25e2/cocoindex-1.0.24-cp314-cp314t-win_amd64.whl", hash = "sha256:9c8ccfe09a730e6a747d2a05f0d35d7a0059b7992b86c377356f87468c4a1b1f", size = 9957590, upload-time = "2026-09-20T01:18:24.054Z" }, -] - -[package.optional-dependencies] -lancedb = [ - { name = "lancedb" }, - { name = "pyarrow" }, -] -sentence-transformers = [ - { name = "sentence-transformers" }, -] - -[[package]] -name = "cocoindex-playground" +name = "cocobee" version = "0.1.0" source = { virtual = "." } dependencies = [ @@ -386,6 +350,42 @@ dev = [ { name = "types-pyyaml", specifier = ">=6.0.12.20260906" }, ] +[[package]] +name = "cocoindex" +version = "1.0.24" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "msgspec" }, + { name = "numpy" }, + { name = "psutil" }, + { name = "python-dotenv" }, + { name = "rich" }, + { name = "typing-extensions" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/c0/51e837cc2c3ba6cc8e54adcbaa1d7fa2cc56427f912cdc9b14a190d6a632/cocoindex-1.0.24.tar.gz", hash = "sha256:4b8a37a8f3395385e459913615effcec2420a7d765713e61dfe7ee6a0aa40a61", size = 779913, upload-time = "2026-09-20T01:18:21.078Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/64/9213e4c849fda0598bbcbbaeb30c952a40d3fb9ce3b382b17e1e4ff9b9c8/cocoindex-1.0.24-cp311-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f0ee415663c3c82db2179bca468b2dafd828c65028102b7cccd649db75dc378e", size = 9530378, upload-time = "2026-09-20T01:18:19.137Z" }, + { url = "https://files.pythonhosted.org/packages/71/e9/8f0c4b2625ab0ad07d0bf2f168744488e54e3008099214f5213334c76ec5/cocoindex-1.0.24-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:00f588ee7de50c0fdbd44d619975c833b6f571cf2033ca6dfd8af33a2ac71885", size = 9618471, upload-time = "2026-09-20T01:18:15.393Z" }, + { url = "https://files.pythonhosted.org/packages/98/81/7d407f2bfb99e12dd401e666a4a07c39f04d68983bf6e65fe607a9e9bc3f/cocoindex-1.0.24-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:92fd3cd175dcf10d69a241c64cbd8cb5c592e23c54e18ff741270d07cd88d547", size = 9497723, upload-time = "2026-09-20T01:18:07.141Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2e/8abbc5430bc39782446b142151270f5b9c3dbceb13bf96d81ba9f0ddaa03/cocoindex-1.0.24-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2800b0d9d56fd230b0c7fd56201ed7d5d3471835d0f3d48786a09cb05aeeca34", size = 9735628, upload-time = "2026-09-20T01:18:11.685Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/1b9fd2e01845411aafdaf50c5818357526af1fb75205f6102d769e6c047b/cocoindex-1.0.24-cp311-abi3-win_amd64.whl", hash = "sha256:63db183e920b760d852677ddc7ae960bfae339fbc7f55542191f5be1af8b6afb", size = 9961478, upload-time = "2026-09-20T01:18:22.305Z" }, + { url = "https://files.pythonhosted.org/packages/a5/6e/a5e4002c211c64e1210c47ed7dde5c857177a1906ffcedbba63a7d65a03f/cocoindex-1.0.24-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b669c7031e1c9422ba0b55aa2c75ed77c7ec950171938abb0107a31c052385a0", size = 9600338, upload-time = "2026-09-20T01:18:17.361Z" }, + { url = "https://files.pythonhosted.org/packages/4b/22/89ed6e6eb096348c03a1b24703855005605ed1dba8dff3edbee526bd08a7/cocoindex-1.0.24-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c7e2108e226fc0bdcf412778f95e1ff3ea919e1b80a30e63f46b79cace468ed7", size = 9491394, upload-time = "2026-09-20T01:18:09.721Z" }, + { url = "https://files.pythonhosted.org/packages/f2/06/1de151c6b1fbb0c7c753c35a8e2ea6e04a926ff7edd8c0a3c676f3846965/cocoindex-1.0.24-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:9196bd67200a5e74357ba83149b3821284a3600374497645bc0b84f024bae4b7", size = 9729406, upload-time = "2026-09-20T01:18:13.625Z" }, + { url = "https://files.pythonhosted.org/packages/be/a3/ca185657df3a379b2551a47be3809cc10e8bfb8358d4d31ce0b3e0cb25e2/cocoindex-1.0.24-cp314-cp314t-win_amd64.whl", hash = "sha256:9c8ccfe09a730e6a747d2a05f0d35d7a0059b7992b86c377356f87468c4a1b1f", size = 9957590, upload-time = "2026-09-20T01:18:24.054Z" }, +] + +[package.optional-dependencies] +lancedb = [ + { name = "lancedb" }, + { name = "pyarrow" }, +] +sentence-transformers = [ + { name = "sentence-transformers" }, +] + [[package]] name = "colorama" version = "0.4.6"