
Tabby Python Client 使用指南用 Python 代码调用 Tabby Server 的 API【免费下载链接】tabbySelf-hosted AI coding assistant项目地址: https://gitcode.com/GitHub_Trending/tab/tabbytabby-python-client 是 Tabby 开源仓库中提供的一个 Python 客户端库用于通过类型化的 Python 代码访问自托管 AI 编程助手 Tabby Server 的 HTTP API代码补全、健康检查、代码搜索等。本文以该客户端库为核心完整讲解客户端的创建与认证、同步/异步调用模式、SSL 校验配置以及基于 Poetry 的构建与发布流程并结合仓库内的生成脚本与 API 源码帮助读者在评测、自动化脚本或自研工具中快速、正确地接入 Tabby Server。一、tabby-python-client 是什么tabby-python-client 是位于 experimental/eval/tabby-python-client 目录下的一个 Python 客户端库它的定位是 A client library for accessing Tabby Server访问 Tabby Server 的客户端库。从源码结构看它是一个典型的由 OpenAPI 规范自动生成的类型化客户端tabby_python_client/client.py核心的Client与AuthenticatedClient类tabby_python_client/api/按 OpenAPI tag 划分的端点函数模块v1、v1betatabby_python_client/models/请求/响应数据模型tabby_python_client/types.py、errors.py共享类型与异常定义。该客户端由 experimental/eval/gen-client.sh 脚本生成脚本先从 Tabby Server 的http://localhost:8080/api-docs/openapi.json拉取 OpenAPI 文档删除/v1beta/chat/completions路径后交给openapi-python-client工具按 experimental/eval/python.yaml 配置生成代码。因此客户端中每个端点、每个字段都严格对应 Tabby Server 的 HTTP API。二、创建客户端Client 与 AuthenticatedClient使用客户端的第一步是创建客户端实例。如果目标端点是公开接口直接使用Clientfrom tabby_python_client import Client client Client(base_urlhttps://api.example.com)如果需要访问受保护的端点例如需要登录令牌的接口则改用AuthenticatedClientfrom tabby_python_client import AuthenticatedClient client AuthenticatedClient(base_urlhttps://api.example.com, tokenSuperSecretToken)从 client.py 的源码可以看到Client类基于attrs定义支持以下运行时配置项属性默认值说明base_url必填API 基础地址所有请求都拼接到该 URL 的相对路径上cookies{}随每个请求发送的 Cookie 字典headers{}随每个请求发送的请求头字典timeout5.0请求超时时间秒超过后 API 函数会抛出httpx.TimeoutExceptionverify_sslTrue是否校验 API 服务器的 SSL 证书生产环境应保持为Trueraise_on_unexpected_statusFalse当 API 返回 OpenAPI 文档未声明的状态码时是否抛出errors.UnexpectedStatusfollow_redirectsFalse是否跟随 HTTP 重定向AuthenticatedClient继承自Client额外增加了三个属性token、prefix默认Bearer和auth_header_name默认Authorization。其get_headers()方法见 client.py会在请求头中拼接出Authorization: Bearer token形式的认证信息若将prefix设为空字符串则直接使用token作为请求头值。此外Client还提供了with_headers()、with_cookies()、with_timeout()等返回新实例的不可变派生方法便于在不修改原客户端的前提下为特定调用附加请求头或调整超时。三、调用端点sync / sync_detailed / asyncio / asyncio_detailed 四种形态生成客户端遵循一个统一约定每个路径/方法组合都会生成一个 Python 模块模块内提供四个函数sync阻塞式请求成功时返回解析后的数据对象失败返回Nonesync_detailed阻塞式请求总是返回一个Response对象成功时其中parsed字段携带解析结果asyncio与sync等价但使用异步方式asyncio_detailed与sync_detailed等价但使用异步方式。通用调用示例如下from tabby_python_client.models import MyDataModel from tabby_python_client.api.my_tag import get_my_data_model from tabby_python_client.types import Response my_data: MyDataModel get_my_data_model.sync(clientclient) # 或需要更多信息例如 status_code时 response: Response[MyDataModel] get_my_data_model.sync_detailed(clientclient)异步版本from tabby_python_client.models import MyDataModel from tabby_python_client.api.my_tag import get_my_data_model from tabby_python_client.types import Response my_data: MyDataModel await get_my_data_model.asyncio(clientclient) response: Response[MyDataModel] await get_my_data_model.asyncio_detailed(clientclient)关于生成规则还有几点说明所有路径参数、查询参数和请求体都会成为函数的入参如果端点在 OpenAPI 文档中带有 tag则使用第一个 tag作为函数所在模块名即示例中的my_tag没有 tag 的端点统一放在tabby_python_client.api.default模块中。Response 与错误处理sync_detailed/asyncio_detailed返回的Response类型定义在 types.py 中包含四个字段status_codeHTTP 状态码、content原始响应字节、headers响应头、parsed解析后的模型或None。如果服务器返回了 OpenAPI 文档中未声明的状态码且Client.raise_on_unexpected_status为True函数会抛出定义在 errors.py 中的UnexpectedStatus异常该异常携带status_code与content反之则静默返回None。另外请求超时会抛出httpx.TimeoutException。四、仓库内置的真实端点补全、健康检查与代码搜索sync/sync_detailed示例中的get_my_data_model是文档的通用占位写法。在实际仓库中tabby-python-client 已经内置了 Tabby Server 的真实端点分布在tabby_python_client/api/下v1/completionsapi/v1/completion.py代码补全端点对应POST /v1/completions。函数接收CompletionRequest请求体返回CompletionResponseCompletionRequest支持language、segments前缀/后缀、user用于 Tabby 监控与生成报告的用户唯一标识、debug_options等字段见 models/completion_request.py。其 docstring 给出了一个补全请求示例{language: python, segments: {prefix: def fib(n):\n , suffix: \n return fib(n - 1) fib(n - 2)}}v1/healthapi/v1/health.py健康检查端点对应GET /v1/health返回HealthState模型包含当前加载的model、device、arch、cpu_info、cpu_count、cuda_devices、version以及可选的chat_model等运行时信息见 models/health_state.pyv1/eventapi/v1/event.py事件上报端点v1beta/searchapi/v1beta/search.py代码搜索端点对应GET /v1beta/search支持q默认get、limit默认20、offset默认0三个查询参数返回SearchResponse。每个端点模块的四个函数均遵循上文所述约定并带有完整的参数与异常 docstringIDE 中可直接获得类型提示。五、SSL 证书校验配置默认情况下客户端在调用 HTTPS API 时会校验 SSL 证书。绝大多数场景下应保持证书校验开启但访问内网服务器时有时需要使用自定义证书 bundle 完成认证client AuthenticatedClient( base_urlhttps://internal_api.example.com, tokenSuperSecretToken, verify_ssl/path/to/certificate_bundle.pem, )也可以完全关闭证书校验但请注意这存在安全风险client AuthenticatedClient( base_urlhttps://internal_api.example.com, tokenSuperSecretToken, verify_sslFalse )从 client.py 的源码可见verify_ssl的类型为Union[str, bool, ssl.SSLContext]传字符串路径表示使用该 PEM 证书 bundle传True/False控制是否校验也可以直接传入一个ssl.SSLContext做更精细的 TLS 控制。该值最终会被传递给 httpx 的verify参数见 api/v1/completion.py。六、构建与发布基于 Poetry 的打包流程该客户端使用 Poetry 管理依赖与打包仓库内的 pyproject.toml 同时配置了 black行宽 120、支持 py38~py311与 isort 等开发工具。发布到仓库更新pyproject.toml中的元数据如作者、版本号如果使用私有仓库先用 Poetry 配置仓库地址与认证信息poetry config repositories.your-repository-name url-to-your-repositorypoetry config http-basic.your-repository-name username password发布到私有仓库执行poetry publish --build -r your-repository-name发布到公共 PyPI 则直接执行poetry publish --build。本地开发安装如果不想发布而是将客户端安装到其他项目中使用如果目标项目使用 Poetry可在该项目中执行poetry add path-to-this-client如果目标项目不使用 Poetry先用poetry build -f wheel构建 wheel 包再从其他项目用pip install path-to-wheel安装该 wheel。七、结合仓库实际重新生成与本地评测场景作为 experimental/eval 评测体系的一部分tabby-python-client 与 Tabby Server 的 OpenAPI 文档保持同步。需要重新生成客户端时可参考 gen-client.sh 的流程先确保本地 Tabby Server 已启动监听 8080 端口脚本会抓取/api-docs/openapi.json过滤掉不参与生成的/v1beta/chat/completions路径再调用openapi-python-client generate生成新的客户端代码。实际使用时一个典型的评测或自动化脚本流程是用Client(base_urlhttp://localhost:8080)或AuthenticatedClient创建客户端 → 调用v1/health确认服务状态 → 构造CompletionRequest调用v1/completions获取代码补全结果 → 通过v1beta/search验证代码检索能力。由于所有端点都有类型化的请求/响应模型即使 Tabby Server 的 API 演进也只需重新生成客户端即可获得最新的类型定义与调用入口。小结tabby-python-client 以 OpenAPI 规范为单一事实来源为 Tabby Server 的 HTTP API 提供了完整、类型化的 Python 调用层。本文覆盖了它的客户端配置认证、超时、SSL、四种函数形态的调用约定、真实端点、错误处理以及 Poetry 打包发布流程读者既可以将其直接用于本地 Tabby 实例的评测与自动化也可以把它作为接入 Tabby Server 其他功能的起点。【免费下载链接】tabbySelf-hosted AI coding assistant项目地址: https://gitcode.com/GitHub_Trending/tab/tabby创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考