pi-ai-python 1.3.0__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.
Files changed (189) hide show
  1. pi_agent/__init__.py +127 -0
  2. pi_agent/agent.py +617 -0
  3. pi_agent/agent_loop.py +820 -0
  4. pi_agent/proxy.py +269 -0
  5. pi_agent/py.typed +0 -0
  6. pi_agent/stream_fn.py +27 -0
  7. pi_agent/tools.py +327 -0
  8. pi_agent/types.py +394 -0
  9. pi_ai/__init__.py +263 -0
  10. pi_ai/abort.py +315 -0
  11. pi_ai/api/__init__.py +1 -0
  12. pi_ai/api/anthropic_messages.py +1782 -0
  13. pi_ai/api/azure_openai_config.py +138 -0
  14. pi_ai/api/azure_openai_responses.py +245 -0
  15. pi_ai/api/bedrock_converse_stream.py +1598 -0
  16. pi_ai/api/classifier_shared.py +211 -0
  17. pi_ai/api/cloudflare.py +36 -0
  18. pi_ai/api/cloudflare_workers_ai_system_one.py +80 -0
  19. pi_ai/api/constrained_sampling.py +279 -0
  20. pi_ai/api/github_copilot_headers.py +30 -0
  21. pi_ai/api/google_generative_ai.py +138 -0
  22. pi_ai/api/google_shared.py +927 -0
  23. pi_ai/api/google_vertex.py +234 -0
  24. pi_ai/api/lazy.py +156 -0
  25. pi_ai/api/llama_cpp_classify.py +449 -0
  26. pi_ai/api/mistral_conversations.py +756 -0
  27. pi_ai/api/openai_codex_responses.py +1545 -0
  28. pi_ai/api/openai_completions.py +1594 -0
  29. pi_ai/api/openai_decisions.py +210 -0
  30. pi_ai/api/openai_prompt_cache.py +19 -0
  31. pi_ai/api/openai_responses.py +418 -0
  32. pi_ai/api/openai_responses_shared.py +840 -0
  33. pi_ai/api/openai_sdk.py +204 -0
  34. pi_ai/api/openrouter_images.py +153 -0
  35. pi_ai/api/pi_messages.py +449 -0
  36. pi_ai/api/registry.py +103 -0
  37. pi_ai/api/simple_options.py +119 -0
  38. pi_ai/api/system_one_shared.py +148 -0
  39. pi_ai/api/transform_messages.py +211 -0
  40. pi_ai/api/typesafe_system_one.py +43 -0
  41. pi_ai/auth/__init__.py +1 -0
  42. pi_ai/auth/context.py +47 -0
  43. pi_ai/auth/credential_store.py +208 -0
  44. pi_ai/auth/helpers.py +123 -0
  45. pi_ai/auth/oauth/__init__.py +5 -0
  46. pi_ai/auth/oauth/_common.py +454 -0
  47. pi_ai/auth/oauth/anthropic.py +283 -0
  48. pi_ai/auth/oauth/callback_server.py +339 -0
  49. pi_ai/auth/oauth/device_code.py +127 -0
  50. pi_ai/auth/oauth/github_copilot.py +508 -0
  51. pi_ai/auth/oauth/kimi_coding.py +283 -0
  52. pi_ai/auth/oauth/load.py +64 -0
  53. pi_ai/auth/oauth/meta.py +238 -0
  54. pi_ai/auth/oauth/openai_chatgpt.py +321 -0
  55. pi_ai/auth/oauth/openai_codex.py +391 -0
  56. pi_ai/auth/oauth/openrouter.py +173 -0
  57. pi_ai/auth/oauth/pkce.py +23 -0
  58. pi_ai/auth/oauth/radius.py +311 -0
  59. pi_ai/auth/oauth/xai.py +220 -0
  60. pi_ai/auth/resolve.py +190 -0
  61. pi_ai/auth/types.py +292 -0
  62. pi_ai/cli.py +265 -0
  63. pi_ai/compat.py +651 -0
  64. pi_ai/env_api_keys.py +137 -0
  65. pi_ai/event_stream.py +329 -0
  66. pi_ai/models.py +1191 -0
  67. pi_ai/models_store.py +121 -0
  68. pi_ai/oauth.py +90 -0
  69. pi_ai/providers/__init__.py +1 -0
  70. pi_ai/providers/all.py +154 -0
  71. pi_ai/providers/amazon_bedrock.py +116 -0
  72. pi_ai/providers/ant_ling.py +23 -0
  73. pi_ai/providers/anthropic.py +105 -0
  74. pi_ai/providers/azure.py +103 -0
  75. pi_ai/providers/baseten.py +23 -0
  76. pi_ai/providers/catalog.py +167 -0
  77. pi_ai/providers/cerebras.py +23 -0
  78. pi_ai/providers/cloudflare_ai_gateway.py +30 -0
  79. pi_ai/providers/cloudflare_auth.py +112 -0
  80. pi_ai/providers/cloudflare_stream.py +84 -0
  81. pi_ai/providers/cloudflare_workers_ai.py +26 -0
  82. pi_ai/providers/data/amazon-bedrock.json +1 -0
  83. pi_ai/providers/data/ant-ling.json +1 -0
  84. pi_ai/providers/data/anthropic.json +1 -0
  85. pi_ai/providers/data/azure.json +1 -0
  86. pi_ai/providers/data/baseten.json +1 -0
  87. pi_ai/providers/data/cerebras.json +1 -0
  88. pi_ai/providers/data/cloudflare-ai-gateway.json +1 -0
  89. pi_ai/providers/data/cloudflare-workers-ai.json +1 -0
  90. pi_ai/providers/data/deepseek.json +1 -0
  91. pi_ai/providers/data/fireworks.json +1 -0
  92. pi_ai/providers/data/github-copilot.json +1 -0
  93. pi_ai/providers/data/google-vertex.json +1 -0
  94. pi_ai/providers/data/google.json +1 -0
  95. pi_ai/providers/data/groq.json +1 -0
  96. pi_ai/providers/data/huggingface.json +1 -0
  97. pi_ai/providers/data/kimi-coding.json +1 -0
  98. pi_ai/providers/data/manifest.json +1 -0
  99. pi_ai/providers/data/meta.json +1 -0
  100. pi_ai/providers/data/minimax-cn.json +1 -0
  101. pi_ai/providers/data/minimax.json +1 -0
  102. pi_ai/providers/data/mistral.json +1 -0
  103. pi_ai/providers/data/moonshotai-cn.json +1 -0
  104. pi_ai/providers/data/moonshotai.json +1 -0
  105. pi_ai/providers/data/nvidia.json +1 -0
  106. pi_ai/providers/data/openai-codex.json +1 -0
  107. pi_ai/providers/data/openai.json +1 -0
  108. pi_ai/providers/data/opencode-go.json +1 -0
  109. pi_ai/providers/data/opencode.json +1 -0
  110. pi_ai/providers/data/openrouter.json +1 -0
  111. pi_ai/providers/data/qwen-token-plan-cn.json +1 -0
  112. pi_ai/providers/data/qwen-token-plan-individual.json +1 -0
  113. pi_ai/providers/data/qwen-token-plan.json +1 -0
  114. pi_ai/providers/data/radius.json +1 -0
  115. pi_ai/providers/data/together.json +1 -0
  116. pi_ai/providers/data/typesafe.json +1 -0
  117. pi_ai/providers/data/vercel-ai-gateway.json +1 -0
  118. pi_ai/providers/data/xai.json +1 -0
  119. pi_ai/providers/data/xiaomi-token-plan-ams.json +1 -0
  120. pi_ai/providers/data/xiaomi-token-plan-cn.json +1 -0
  121. pi_ai/providers/data/xiaomi-token-plan-sgp.json +1 -0
  122. pi_ai/providers/data/xiaomi.json +1 -0
  123. pi_ai/providers/data/zai-coding-cn.json +1 -0
  124. pi_ai/providers/data/zai.json +1 -0
  125. pi_ai/providers/deepseek.py +23 -0
  126. pi_ai/providers/faux.py +680 -0
  127. pi_ai/providers/fireworks.py +26 -0
  128. pi_ai/providers/github_copilot.py +46 -0
  129. pi_ai/providers/google.py +23 -0
  130. pi_ai/providers/google_vertex.py +131 -0
  131. pi_ai/providers/groq.py +23 -0
  132. pi_ai/providers/huggingface.py +23 -0
  133. pi_ai/providers/kimi_coding.py +32 -0
  134. pi_ai/providers/meta.py +32 -0
  135. pi_ai/providers/minimax.py +23 -0
  136. pi_ai/providers/minimax_cn.py +23 -0
  137. pi_ai/providers/mistral.py +23 -0
  138. pi_ai/providers/moonshotai.py +23 -0
  139. pi_ai/providers/moonshotai_cn.py +23 -0
  140. pi_ai/providers/nvidia.py +23 -0
  141. pi_ai/providers/openai.py +44 -0
  142. pi_ai/providers/openai_codex.py +26 -0
  143. pi_ai/providers/opencode.py +36 -0
  144. pi_ai/providers/opencode_go.py +33 -0
  145. pi_ai/providers/opencode_headers.py +60 -0
  146. pi_ai/providers/openrouter.py +145 -0
  147. pi_ai/providers/openrouter_api.py +122 -0
  148. pi_ai/providers/qwen_token_plan.py +23 -0
  149. pi_ai/providers/qwen_token_plan_cn.py +23 -0
  150. pi_ai/providers/qwen_token_plan_individual.py +23 -0
  151. pi_ai/providers/radius.py +146 -0
  152. pi_ai/providers/radius_config.py +136 -0
  153. pi_ai/providers/together.py +23 -0
  154. pi_ai/providers/typesafe.py +22 -0
  155. pi_ai/providers/vercel_ai_gateway.py +25 -0
  156. pi_ai/providers/xai.py +32 -0
  157. pi_ai/providers/xiaomi.py +23 -0
  158. pi_ai/providers/xiaomi_token_plan_ams.py +23 -0
  159. pi_ai/providers/xiaomi_token_plan_cn.py +23 -0
  160. pi_ai/providers/xiaomi_token_plan_sgp.py +23 -0
  161. pi_ai/providers/zai.py +23 -0
  162. pi_ai/providers/zai_coding_cn.py +23 -0
  163. pi_ai/py.typed +0 -0
  164. pi_ai/serialization.py +477 -0
  165. pi_ai/session_resources.py +33 -0
  166. pi_ai/types.py +1003 -0
  167. pi_ai/utils/__init__.py +1 -0
  168. pi_ai/utils/callbacks.py +15 -0
  169. pi_ai/utils/diagnostics.py +70 -0
  170. pi_ai/utils/error_body.py +89 -0
  171. pi_ai/utils/estimate.py +125 -0
  172. pi_ai/utils/fastjson.py +63 -0
  173. pi_ai/utils/http.py +409 -0
  174. pi_ai/utils/json_parse.py +424 -0
  175. pi_ai/utils/misc.py +193 -0
  176. pi_ai/utils/model_operations.py +73 -0
  177. pi_ai/utils/models_error.py +35 -0
  178. pi_ai/utils/oauth_page.py +121 -0
  179. pi_ai/utils/overflow.py +87 -0
  180. pi_ai/utils/retry.py +193 -0
  181. pi_ai/utils/schema.py +283 -0
  182. pi_ai/utils/text.py +65 -0
  183. pi_ai/utils/transcript.py +271 -0
  184. pi_ai/utils/validation.py +813 -0
  185. pi_ai_python-1.3.0.dist-info/METADATA +167 -0
  186. pi_ai_python-1.3.0.dist-info/RECORD +189 -0
  187. pi_ai_python-1.3.0.dist-info/WHEEL +4 -0
  188. pi_ai_python-1.3.0.dist-info/entry_points.txt +2 -0
  189. pi_ai_python-1.3.0.dist-info/licenses/LICENSE +22 -0
@@ -0,0 +1,167 @@
1
+ Metadata-Version: 2.5
2
+ Name: pi-ai-python
3
+ Version: 1.3.0
4
+ Summary: Python port of pi's AI libraries: a unified LLM API (pi_ai) and a stateful agent runtime (pi_agent)
5
+ Project-URL: Homepage, https://github.com/nivalume/pi-py
6
+ Project-URL: Source, https://github.com/nivalume/pi-py
7
+ Project-URL: Upstream, https://github.com/earendil-works/pi
8
+ Author: nivalume
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: agent,ai,anthropic,bedrock,gemini,llm,openai,streaming,tools
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Framework :: AsyncIO
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Typing :: Typed
20
+ Requires-Python: >=3.11
21
+ Requires-Dist: anthropic>=1.15
22
+ Requires-Dist: google-genai>=2.31
23
+ Requires-Dist: httpx>=0.27
24
+ Requires-Dist: openai>=3.35
25
+ Provides-Extra: all
26
+ Requires-Dist: boto3>=1.43; extra == 'all'
27
+ Requires-Dist: orjson>=3.10; extra == 'all'
28
+ Requires-Dist: pydantic>=2.6; extra == 'all'
29
+ Requires-Dist: websockets>=13; extra == 'all'
30
+ Provides-Extra: bedrock
31
+ Requires-Dist: boto3>=1.43; extra == 'bedrock'
32
+ Provides-Extra: fast
33
+ Requires-Dist: orjson>=3.10; extra == 'fast'
34
+ Provides-Extra: pydantic
35
+ Requires-Dist: pydantic>=2.6; extra == 'pydantic'
36
+ Provides-Extra: websocket
37
+ Requires-Dist: websockets>=13; extra == 'websocket'
38
+ Description-Content-Type: text/markdown
39
+
40
+ # pi-py
41
+
42
+ Python port of [pi](https://github.com/earendil-works/pi)'s core libraries, published on
43
+ PyPI as one package, `pi-ai-python`, with two import packages:
44
+
45
+ | Import | Upstream | What it does |
46
+ | --- | --- | --- |
47
+ | [`pi_ai`](https://github.com/nivalume/pi-py/blob/main/packages/ai/README.md) | `@earendil-works/pi-ai` | Unified LLM API: provider collections, auth resolution (API keys, OAuth), streaming events, token and cost tracking, tool calling, cross-provider context hand-off, image generation, classification |
48
+ | [`pi_agent`](https://github.com/nivalume/pi-py/blob/main/packages/agent/README.md) | `@earendil-works/pi-agent-core` | Stateful agent: tool execution (parallel or sequential), steering and follow-up queues, lifecycle events, hooks |
49
+
50
+ ```bash
51
+ pip install pi-ai-python # httpx + official SDKs: anthropic, openai, google-genai
52
+ pip install "pi-ai-python[bedrock]" # + boto3 for Amazon Bedrock
53
+ pip install "pi-ai-python[all]" # + orjson, websockets, pydantic, boto3
54
+ ```
55
+
56
+ 中文说明见 [README.zh-CN.md](https://github.com/nivalume/pi-py/blob/main/README.zh-CN.md)。
57
+
58
+ ```python
59
+ import asyncio
60
+
61
+ from pi_ai import Context, UserMessage
62
+ from pi_ai.providers.all import builtin_models
63
+
64
+
65
+ async def main() -> None:
66
+ models = builtin_models() # every built-in provider; auth comes from env vars such as ANTHROPIC_API_KEY
67
+ model = models.get_model("anthropic", "claude-sonnet-4-5")
68
+ stream = models.stream(model, Context(system_prompt="Be brief.", messages=[UserMessage("Hello!")]))
69
+ async for event in stream:
70
+ if event.type == "text_delta":
71
+ print(event.delta, end="", flush=True)
72
+ message = await stream.result()
73
+ print(f"\n{message.usage.input} in / {message.usage.output} out, ${message.usage.cost.total:.4f}")
74
+
75
+
76
+ asyncio.run(main())
77
+ ```
78
+
79
+ ```python
80
+ from pi_agent import Agent, AgentInitialState, agent_tool
81
+
82
+
83
+ @agent_tool
84
+ async def get_time(timezone: str = "UTC") -> str:
85
+ """Get the current time.
86
+
87
+ Args:
88
+ timezone: IANA timezone name.
89
+ """
90
+ ...
91
+
92
+
93
+ agent = Agent(
94
+ initial_state=AgentInitialState(system_prompt="You are helpful.", model=model, tools=[get_time]),
95
+ stream_fn=models.stream_simple,
96
+ )
97
+ async for event in agent.events("What time is it in Tokyo?"):
98
+ print(event.type)
99
+ ```
100
+
101
+ ## Same API, Python conventions
102
+
103
+ The port keeps pi's architecture and semantics: the same `Models`/`Provider`
104
+ runtime, the same event protocol (`start` → `text_delta`… → `done`/`error`), the
105
+ same transcript model (system prompt and tools carried by system messages), the
106
+ same auth precedence rules, the same model catalog, and the same agent loop.
107
+ Names follow Python conventions:
108
+
109
+ | TypeScript | Python |
110
+ | --- | --- |
111
+ | `createModels()`, `models.streamSimple(...)` | `create_models()`, `models.stream_simple(...)` |
112
+ | `{ apiKey, sessionId, maxTokens }` options | `api_key=..., session_id=..., max_tokens=...` keyword arguments (or a dict) |
113
+ | `message.stopReason`, `usage.cacheRead` | `message.stop_reason`, `usage.cache_read` |
114
+ | `{ role: "user", content: "hi", timestamp }` | `UserMessage("hi")` (timestamp defaults to now) |
115
+ | `Type.Object({...})` (TypeBox) | `Type.Object({...})` (built in) or a Pydantic model |
116
+ | `AbortController` / `signal` | `pi_ai.AbortController` / `signal=` |
117
+ | `for await (const e of stream)` / `await stream.result()` | `async for e in stream` / `await stream.result()` |
118
+ | `agent.continue()` | `agent.continue_()` (alias `agent.resume()`) |
119
+
120
+ String values that appear on the wire or in persisted transcripts are unchanged
121
+ (`"toolUse"`, `"toolResult"`, `"text_delta"`, API ids, provider ids), and
122
+ `pi_ai.serialization` reads and writes pi's camelCase JSON, so sessions, model
123
+ definitions and `auth.json` credential files are interchangeable with TypeScript pi.
124
+
125
+ ## Design notes
126
+
127
+ * **Official vendor SDKs.** As in pi, the Anthropic, OpenAI (Chat Completions,
128
+ Responses, Azure, OpenRouter images), Google (Gemini, Vertex) and Bedrock adapters use
129
+ the vendors' official SDKs: `anthropic`, `openai`, `google-genai` and `boto3`
130
+ (`pi-ai-python[bedrock]`). The SDK clients share one pooled `httpx.AsyncClient` per event loop.
131
+ APIs that pi calls without an SDK (Mistral, OpenAI Codex, pi-messages, classifiers)
132
+ use `httpx` directly.
133
+ * **Fast streaming path.** Slotted data classes, an allocation-light event queue,
134
+ zero-copy forwarding between wrapped streams, an incremental partial-JSON parser
135
+ for tool-call arguments (about 60x faster than re-parsing each delta on large
136
+ arguments), linear-time accumulation of streamed text, optional `orjson` decoding,
137
+ and compiled, cached tool-argument validators. On one core the anthropic-messages
138
+ adapter processes about 110,000 stream events per second and openai-completions about
139
+ 70,000, where the openai SDK's SSE decoder is the limit (see `benchmarks/`).
140
+ * **Lazy everything.** Model catalogs load per provider on first use; API
141
+ implementations and OAuth flows import on first request.
142
+ * **Async-native cancellation.** `AbortSignal` aborts interrupt pending network reads
143
+ immediately (task cancellation scoped by `abort_scope`), and aborted requests end
144
+ their stream with `stop_reason == "aborted"` instead of raising.
145
+ * **Python-friendly additions.** Pydantic models as tool parameter schemas,
146
+ `@agent_tool` to build tools from typed functions, `Agent.events()` as an async
147
+ iterator, `FileCredentialStore` (pi's `auth.json` format with cross-process locking),
148
+ keyword-argument options, streams that can be created outside an event loop and
149
+ closed with `async with`.
150
+
151
+ ## Development
152
+
153
+ ```bash
154
+ uv sync # create .venv with the package (editable) and dev tools
155
+ uv run pytest # run all tests (offline; HTTP is mocked)
156
+ uv run ruff check . && uv run ruff format --check .
157
+ uv run pyright
158
+ uv run python benchmarks/bench_partial_json.py
159
+ uv run python benchmarks/bench_stream.py
160
+ ```
161
+
162
+ Model catalog data (`packages/ai/src/pi_ai/providers/data/*.json`) is the generated
163
+ catalog shipped with `@earendil-works/pi-ai` 1.3.0.
164
+
165
+ ## License
166
+
167
+ MIT. Based on pi by Mario Zechner and contributors.
@@ -0,0 +1,189 @@
1
+ pi_agent/__init__.py,sha256=fUQsvYm6WjQViElKfaqA21v0zYz2MR48wwwHdvmQMmI,2984
2
+ pi_agent/agent.py,sha256=oYhqMkCdjtqDfgTIaWOASnEHtaenGI7ItAu5Kv2f208,24327
3
+ pi_agent/agent_loop.py,sha256=yOCK-shmRHUQLGXzryRmR1AfdLBLqqsCFBQGwmet8pU,31097
4
+ pi_agent/proxy.py,sha256=67DrfoQ1zVyOCTuHu6QoytQzcDapTSOQpJ2ayX2GXj0,10520
5
+ pi_agent/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ pi_agent/stream_fn.py,sha256=AYw4LZfnNy-Uj9rIubL4hqbYYgBAWeuLbiGOAHmVHrQ,855
7
+ pi_agent/tools.py,sha256=JxMrgNqH8qg52BrQoMuKUFdW0bn8UjxjUm1bjC3N7qE,13167
8
+ pi_agent/types.py,sha256=yrs9974UrhS1W8bT03bweIUnV9eNx603WTlSCtPqtsk,12246
9
+ pi_ai/__init__.py,sha256=G1GXXkFD-_AayaNeJ61TyEsthilXKAG-dzz8igW3nR8,7085
10
+ pi_ai/abort.py,sha256=0zSk-2WrOH7Q-gkM7Pmm6mU-QCKhT93F6EyOseZGJ_A,10872
11
+ pi_ai/cli.py,sha256=ujYnW3edNlJh6_GnIl-xpBY0tMohhb73JDEFl-eByys,9857
12
+ pi_ai/compat.py,sha256=uDA-40XzdRFz2CkEHFSw9k6kWsKFHgElg0osKXucY54,23630
13
+ pi_ai/env_api_keys.py,sha256=71dOGISyp6XPCU8Ki9kgRYRCFlxrAGA0PhFNq6nbJaM,5508
14
+ pi_ai/event_stream.py,sha256=Ouaehlr0mGio7EA2h6ZMJAc2UcaoxRr3zmrpJR3xTpw,11672
15
+ pi_ai/models.py,sha256=cMtL-hU4EWHbz9gseIdh7W5iekADusJqm_ICDdyAjfE,50369
16
+ pi_ai/models_store.py,sha256=geL0FimL7SdPH48fMldat5YiQqpogx8R6xal7cULH2k,4595
17
+ pi_ai/oauth.py,sha256=ZNOcWZ1tImsLZ8EnUvaH5Ja_3iWUVxSBdXJegLmJQM4,2373
18
+ pi_ai/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ pi_ai/serialization.py,sha256=cHbs_HpicCpLVoPlIX1NS_bQg1hvd68q-k9GlD5IZeg,15276
20
+ pi_ai/session_resources.py,sha256=8kHJdZPw868MqxvTGcr044rgZC8qpJDgmhj-r6SheJM,1019
21
+ pi_ai/types.py,sha256=uBWHmz_y5SBxeGGcf1SbI2VVJhlxLd--ei3hZDTIRTc,30106
22
+ pi_ai/api/__init__.py,sha256=GPyzhMCvsRqOi-0iG2mdbuDtVt5gYd1KqNjNdAp6JlM,106
23
+ pi_ai/api/anthropic_messages.py,sha256=n6YDxxhzWj-SIn772v2nTGDghAjsctZwsGP5e8Sr9N4,77763
24
+ pi_ai/api/azure_openai_config.py,sha256=rxWGNLhLCawkodkT5yyBJ5bi0nypbYlcYPRuGaiJ9Io,5195
25
+ pi_ai/api/azure_openai_responses.py,sha256=SKZqg1ZYWc8U0dCE55MCu3S1FNwQCm8jIBJi-7YrwQ8,10952
26
+ pi_ai/api/bedrock_converse_stream.py,sha256=I1UfvqMRafc6sRdk-rHgj0JlPHGIbOO4MGN46POikbE,64837
27
+ pi_ai/api/classifier_shared.py,sha256=OFOcl_tBo5AyXa6DhL9kXd7VyXUzdm95fNz6C8yX0xk,7748
28
+ pi_ai/api/cloudflare.py,sha256=taLNFHj3edndKHxK0vS0B6Gygref-sgrhfArQ8THppo,1440
29
+ pi_ai/api/cloudflare_workers_ai_system_one.py,sha256=E3lEHTpZc9nsUfbFatLjfM45SUcJZRs5QLpfy9pt0mk,2965
30
+ pi_ai/api/constrained_sampling.py,sha256=AoWhj1E6ItZChnSjrlBLojmq-ATHaBMRizEXWbVz_1g,11099
31
+ pi_ai/api/github_copilot_headers.py,sha256=YzejyHxIJ2mTLV7fXdKF_80IDE42lc3GI_japkvSCyM,1251
32
+ pi_ai/api/google_generative_ai.py,sha256=wbHp1WMQbedZBVcWW8_SHZ8nNsAHYkRf-rjUTyhW3fc,5096
33
+ pi_ai/api/google_shared.py,sha256=P2HQ3bnCan53DhnwdzlgS4qHoGhvWt4_FuBuxucQo-I,39881
34
+ pi_ai/api/google_vertex.py,sha256=6rD9SAGITHGMTuKnsfKc6Ks7bvhvmmuA6qU68bj260c,9052
35
+ pi_ai/api/lazy.py,sha256=cD_469HX77x2Bq8eIRN-sKyqTaTO7F9A9bcR45vI0mo,6215
36
+ pi_ai/api/llama_cpp_classify.py,sha256=3783IplCKV8wLkBC0fSFQCkJ-rsJFeKOtH4V85MiNuA,18939
37
+ pi_ai/api/mistral_conversations.py,sha256=QtVmzmOs1YN59aoIW9MdbKs3-qeTRE5F_BUSQeE-dlE,30008
38
+ pi_ai/api/openai_codex_responses.py,sha256=hpa38ySzf0Bn2UHSh8ghaHKNo434I2n4JoyWJ7Wv26o,61326
39
+ pi_ai/api/openai_completions.py,sha256=zTjVipxG6ZqYl4IR5VpPzCAIafvq4Ea6XzepQE3Gq0o,67716
40
+ pi_ai/api/openai_decisions.py,sha256=H87BC6aJYxY8riJnTR5Emw80cDQdDUQn7KO3Nz7h0V4,8504
41
+ pi_ai/api/openai_prompt_cache.py,sha256=BI5uNr1IpJe6V_F65THwIiq_OeQwnwIOCahbqC_TfRw,609
42
+ pi_ai/api/openai_responses.py,sha256=SlJtGueMbsDz9n6xPHaJKgYqwtvJ3Ulsg_rplP4toAU,18370
43
+ pi_ai/api/openai_responses_shared.py,sha256=qs7lmT7oJG_xVR4DHFl6FSOOUwqqsoDoiCHWCLkWlZs,39217
44
+ pi_ai/api/openai_sdk.py,sha256=9q_HQJ31jA8zCckoApFtNJbBOLZSIRFNj1-j3nvKqog,8424
45
+ pi_ai/api/openrouter_images.py,sha256=Tjs90hMQhqz8Mr7TimYwYYoxrnKilSoXbp5zuGldMCg,6432
46
+ pi_ai/api/pi_messages.py,sha256=gw8pR18etWoLg3yDJUPVhfeUFHz22snXxYLAEHG40YE,17738
47
+ pi_ai/api/registry.py,sha256=jIwNuhvkPappq4NSGgHeWHH4qDqkVSPgKmB0-IBP250,3108
48
+ pi_ai/api/simple_options.py,sha256=rtVoesN_eBdnljzbBSBuLGXR5qWY5uha-YEdCDyf1wE,4358
49
+ pi_ai/api/system_one_shared.py,sha256=qYfyvUc19-rDWnwo_4mwWI6yVl3YSyGAjaqa7g1yBcg,6112
50
+ pi_ai/api/transform_messages.py,sha256=uwbxtBWi9D-2y33wdU_xj4nqC2jzdI9Z0earVRSP-Ew,7997
51
+ pi_ai/api/typesafe_system_one.py,sha256=GpqCo5p7xytHIyrayEZpyaE7GoddliFA2q9tF51i4ck,1373
52
+ pi_ai/auth/__init__.py,sha256=-1Q5qVmKKZ4f8m1BGLFaZewVytiKbYrkpCgUCPjoTdI,71
53
+ pi_ai/auth/context.py,sha256=TDJGKZpUWEB4T2G2hVXiNr_b5gARStEJKDXIHZZfwuI,1430
54
+ pi_ai/auth/credential_store.py,sha256=9xEUVM-sjBXY3O3AsJTSM-dB9cHlWJ8tqFoEuDjEu50,7831
55
+ pi_ai/auth/helpers.py,sha256=Ezqv-tFDnxcG2nMZ0gehrvCbZe1DxuXhXRR-GZK78zo,4301
56
+ pi_ai/auth/resolve.py,sha256=qAc34KAZLBmkmQfaxpzB52jUCRvFvqK6EdfLPOgifz0,7236
57
+ pi_ai/auth/types.py,sha256=WEMRqjpIgwTlAZyvQ84uX0OHri9do5G_jW0y0oYO2e0,8909
58
+ pi_ai/auth/oauth/__init__.py,sha256=RLDdrBBdSyl4KitUT2gBa3AOMp4-U4kvUvI5Etd3uac,131
59
+ pi_ai/auth/oauth/_common.py,sha256=bfkRrkksClU08cqLB-8OVAl59u8jNQ3EArxTynVd_xQ,14967
60
+ pi_ai/auth/oauth/anthropic.py,sha256=FvYnZnd-rw5lRHOz36gVdVB5RmRJNzhDL6VEPQ-EqOM,10643
61
+ pi_ai/auth/oauth/callback_server.py,sha256=hJW03I7DCjXfsYqfsytdgPxTleYV-tlalejFao3wMXM,13163
62
+ pi_ai/auth/oauth/device_code.py,sha256=NIyflChu2bXhaxZqsYQFnrZA_Yy7AkNHK9dnXrLF2JE,4616
63
+ pi_ai/auth/oauth/github_copilot.py,sha256=ryJKreejMA7nkhnTJaUIieVa7gFNqAmUAQpu7bkQI_8,18673
64
+ pi_ai/auth/oauth/kimi_coding.py,sha256=y1PYBbTVXHchkBl06yH2ZgXaQ4NYp1caTIOTUfu4gQ8,10710
65
+ pi_ai/auth/oauth/load.py,sha256=RlV4NVORDo0dgLBmqqkoCw7Cr_TymygodpxA9rXltqs,1610
66
+ pi_ai/auth/oauth/meta.py,sha256=B9UGLbnzT2EYEl9fcjd4EwqJgOa7K52-Rx_KOYARomc,9125
67
+ pi_ai/auth/oauth/openai_chatgpt.py,sha256=o-i9zG9GElUcLYT1XZqaNmzQ6ISVmPTWE6a5l6E-RyA,13582
68
+ pi_ai/auth/oauth/openai_codex.py,sha256=z4wD_HfhqUa95tGWWykqv-Nms_Ix4uG5TCmxkEbH5ZY,14070
69
+ pi_ai/auth/oauth/openrouter.py,sha256=H9crbDoWTD-Cnv9R9hKsVGeYp2_qTao8omrcp3Rin3Y,6217
70
+ pi_ai/auth/oauth/pkce.py,sha256=iFR-f7CdwC8fpCSueO1sf0L302dP2m2npgoTMsTnRpk,597
71
+ pi_ai/auth/oauth/radius.py,sha256=cCWToKD9yM8jJ_h3Ikm1PnQyYGrI7XpbdpRTmPlk2ZQ,11669
72
+ pi_ai/auth/oauth/xai.py,sha256=Xrd39zPTq6rQ1KehTcufdZBJPddcmUts0z_p4KX3UpM,8470
73
+ pi_ai/providers/__init__.py,sha256=YkODkSsenKQd0a-7y51zdtOkl-lk393s8C7a-hLfzx8,86
74
+ pi_ai/providers/all.py,sha256=0KyE8XvI6jP76aKCfTjSKq8EN4AXl32pYTiYUJUFZlw,5268
75
+ pi_ai/providers/amazon_bedrock.py,sha256=6PAE9eT8D42qf0kxUbHPIZrmtL5MUb1w0wZFMnwqTVY,4505
76
+ pi_ai/providers/ant_ling.py,sha256=YvkIPP9Kx_zQDUOuvG2AuwS9Nlm03yRew8QcdENtZXo,761
77
+ pi_ai/providers/anthropic.py,sha256=yg1-wanhJ-UPG3706QLHmsUP4ZPf1cx53-53QcDKL1k,3975
78
+ pi_ai/providers/azure.py,sha256=9CydhBdd-i1hsGM7tuDqBIpJq-_N3ig1SMOETB3O_B8,3724
79
+ pi_ai/providers/baseten.py,sha256=6OkPuHAS8EyRhOTNbRmZfg4bQIUTWuhJhcmYz8P0Exg,755
80
+ pi_ai/providers/catalog.py,sha256=hMC9zTBF_NrkmdLbje7SAj19DOzE7HYA1Btw0Z1B84s,5140
81
+ pi_ai/providers/cerebras.py,sha256=4B-6EUeTNu90h027cq_D17eWCgBz1sYMJ7I0QzD_CXw,760
82
+ pi_ai/providers/cloudflare_ai_gateway.py,sha256=85LFf5aKKjSko9vsejPHSYJxZI0BtLRsLI6pqFq_4WA,1353
83
+ pi_ai/providers/cloudflare_auth.py,sha256=H1K1PDv_q3Fon8g6UNdAmh2EyWKdLWpIm8EgAk0ehW4,4534
84
+ pi_ai/providers/cloudflare_stream.py,sha256=TIZmOfiTnSb-3wV39t0D3QWwb5cUOkiMffvi28Ifx78,3127
85
+ pi_ai/providers/cloudflare_workers_ai.py,sha256=i6NBm9-2Hj-KH4PkJCsnmGnwx4c3D0ebpixgW9JfsWQ,1038
86
+ pi_ai/providers/deepseek.py,sha256=CZKMed8KzDZGkEzmWbz76qt5L56fsxXA7ztfPiABLy0,758
87
+ pi_ai/providers/faux.py,sha256=TIKSA3i-Lk-wb1c-x_OYwu8lXN_7PUNT5AB4tycaIXE,24378
88
+ pi_ai/providers/fireworks.py,sha256=p2qb6AOpWmerW3NtEtnf1bZaR0JALzWg3mg2JsiYpL8,914
89
+ pi_ai/providers/github_copilot.py,sha256=R6xk9hCzSPgS-AXR_08hR01tQwbOZwEO3g5Z-HtlFPY,1889
90
+ pi_ai/providers/google.py,sha256=eqd92UzbdUOB5ribgLF6tDH4HVjOZvrh18INmdNYvDk,742
91
+ pi_ai/providers/google_vertex.py,sha256=pSHWVVuMBv0Wax7hXATBunkhTQUFQirCAW_U8RnTkpw,5069
92
+ pi_ai/providers/groq.py,sha256=RNXgIZNA8lvM_oBunSAZ1nNHs2V1VVACeLVVJSA2QZg,724
93
+ pi_ai/providers/huggingface.py,sha256=vNKJOEJTjGwxA4zxV-NGG7h_4BmfrNbkpqL-7O5lHCA,776
94
+ pi_ai/providers/kimi_coding.py,sha256=-fl8HvPyIHDjZlbLs5eGWqKqqaAVgTx0oZ48R4tNj3M,1072
95
+ pi_ai/providers/meta.py,sha256=O9L0kK_r18TJr83t6nnU_SgmS4g2G4UPEYeyeBBBgZI,1004
96
+ pi_ai/providers/minimax.py,sha256=01hUMkk5YGDHOkobITBUhKw-OTuqFJLhYcEUKY4cBnw,744
97
+ pi_ai/providers/minimax_cn.py,sha256=rfZ53SSz2QovvVzD8XuoCcWpQodiqjZwm5Z-1Ro6PGg,776
98
+ pi_ai/providers/mistral.py,sha256=SHFeO6tKyLcHz2mI9uOhBKC5xBZZJo0HdxlaFhKEVRs,743
99
+ pi_ai/providers/moonshotai.py,sha256=ghZjZ_4b7zFF-oDDWsidponYVsSmU0y7rvF57s1Z7gs,780
100
+ pi_ai/providers/moonshotai_cn.py,sha256=yxp_PtoC7KbXInahjy2Vyn5epx416OYkM2SezL9H7DE,801
101
+ pi_ai/providers/nvidia.py,sha256=cOcYKjiIIsurZDRsKc2JV6V5B1jHxARooJs1MTn5Dls,749
102
+ pi_ai/providers/openai.py,sha256=U6llUqw8v5I6mC__2hTjYAMerLQE1usaaWV3O0kYCKc,1667
103
+ pi_ai/providers/openai_codex.py,sha256=g9F0lQwUxB-vZUJltNbhhmFObWFJLp3YX9MPVW1VobM,913
104
+ pi_ai/providers/opencode.py,sha256=SeCU6LIFhD4PXk5VOK9O8Fe4sLETJJ5mMr5puTFIIYk,1384
105
+ pi_ai/providers/opencode_go.py,sha256=1P61KjOzA6mBWu4FsMfreTZd-4AsTe4_vWL0UhkfvoY,1209
106
+ pi_ai/providers/opencode_headers.py,sha256=YwQicStsN69PtITszwYNINjRVUsdY5NjhgHATvk-KfM,2251
107
+ pi_ai/providers/openrouter.py,sha256=E2LGB9_PZLCrqOGPIP5Jt6lwo8uoYewaI4956rkmtLA,5736
108
+ pi_ai/providers/openrouter_api.py,sha256=qECuY9ovZ-0WSmSk0cuOv_uuK_YDuPjdc0vUhLYWd-g,4033
109
+ pi_ai/providers/qwen_token_plan.py,sha256=pw5TtYPCiZOc5SReGEl7ko9PVZcB-x2lIFldq9_0B0A,874
110
+ pi_ai/providers/qwen_token_plan_cn.py,sha256=mgv_cOZic0Nlt8GZD1sYkeNl9RZb7Tzn7AbAKQGX-jc,900
111
+ pi_ai/providers/qwen_token_plan_individual.py,sha256=iati1bVSosiWK42GheLTubtWpvGhARVOMznnuH637H4,962
112
+ pi_ai/providers/radius.py,sha256=02qoHW5Xn8lEs8mBIY5X4Qsi86rvDl9AwGYm1dFYPms,5662
113
+ pi_ai/providers/radius_config.py,sha256=nXOc-pwYIk-FAZCJCksgyMZWEqRpKkr-kDhczqAPobk,4614
114
+ pi_ai/providers/together.py,sha256=HDUg9E-Bi9F53o8rUVFxalbrG7lU967vVxnyMAyN6PI,760
115
+ pi_ai/providers/typesafe.py,sha256=uZOC-NN1qSaJdsoBq_30WhMqHx5-zVvwTAj_kMoX4HE,759
116
+ pi_ai/providers/vercel_ai_gateway.py,sha256=vjA3zg-3bsehQ_HR0QId0EnHEQQR8VeEnvYulXFSzkI,1009
117
+ pi_ai/providers/xai.py,sha256=3I_ZcgWWvQznrY9kvyZNtoywYFmGXfHCSoyl9Mhk2PE,1006
118
+ pi_ai/providers/xiaomi.py,sha256=2k1e4DbqDixgmtsyWzXTqUsuL-Bcd7wzMnVQ69nwVgI,743
119
+ pi_ai/providers/xiaomi_token_plan_ams.py,sha256=5UD-25sto6j4o9foVdRROwTt5S-KDsAPQysvXGI-uv4,904
120
+ pi_ai/providers/xiaomi_token_plan_cn.py,sha256=gkla-M-8rKz_1Bo8eEAJXk43gJEq7XTk8GpOfjo0a74,893
121
+ pi_ai/providers/xiaomi_token_plan_sgp.py,sha256=4esKNEitHmTMbLvs51htbi61SyfuHt6MlurOxfv06X4,904
122
+ pi_ai/providers/zai.py,sha256=E2zY7haDcZMJbYb52NATyM0DufD3FYHphDY1ZWJHS20,723
123
+ pi_ai/providers/zai_coding_cn.py,sha256=8BaYRzYPWlYCVn_f3tX-AxMtGV7Smnk4H7hmMMnrwik,831
124
+ pi_ai/providers/data/amazon-bedrock.json,sha256=3yJ9QmtnjkTNgt6uHPQzhV1rJ_Nv7c_z70-4Ev6IKGg,103173
125
+ pi_ai/providers/data/ant-ling.json,sha256=Yo_qs-9sfYDOlvdZmYBOHZ8F_sOFHlMC4w__O2nbkPY,1692
126
+ pi_ai/providers/data/anthropic.json,sha256=kfXaAUUsd0ZkXTQFvJHgn4SeTkaHx8f_ItiXbq_mS4c,11820
127
+ pi_ai/providers/data/azure.json,sha256=RsTiW4RGPGR15wbFgRltJzXDX-uWEtLvygq5MskX1yc,20346
128
+ pi_ai/providers/data/baseten.json,sha256=H82rja8ogb0JnrCPlBb331vzmXWTfSpjuEFUK9Ay8uY,17973
129
+ pi_ai/providers/data/cerebras.json,sha256=Psy1jF3j0Nx7pJ3G5He6KfAMsxUM4KNcyQ1Z5rWrNo4,1112
130
+ pi_ai/providers/data/cloudflare-ai-gateway.json,sha256=OIrv0vHlxbB4NnPeGs2kp-qN6FPrtb7u7elkapAVmio,38393
131
+ pi_ai/providers/data/cloudflare-workers-ai.json,sha256=mLnIy0EhOa4_XS9eSRNPhBLtThOaEr9ss666OKrMa7M,13511
132
+ pi_ai/providers/data/deepseek.json,sha256=EKKW-z6Jj3cVyAiQyK8K9PX9WPItvNZhL9xddiFXzNw,1387
133
+ pi_ai/providers/data/fireworks.json,sha256=jbPBH2Wl12Jg1QQKXcWp7w81uS3oUFowkHwjVcKDezY,16227
134
+ pi_ai/providers/data/github-copilot.json,sha256=HH13pMMgCBuwqAssjhhbNPB7c9OOZ9IPPcq89y8vj80,29075
135
+ pi_ai/providers/data/google-vertex.json,sha256=Vk1pKkKS7xLpjI7AVqOZSOpk4QhR9d2q68w3tYVUUjE,7794
136
+ pi_ai/providers/data/google.json,sha256=4T08UbEwKNglMVMWX3Q46i88PqqPIJvpUtPp3tRJS1o,14532
137
+ pi_ai/providers/data/groq.json,sha256=kQlSrZ2tB4Vpg0WdY_zgFI26EgPt17ENgBp3xYJPNAU,3354
138
+ pi_ai/providers/data/huggingface.json,sha256=Y5npWHkKnZDCH7VdHL74VpQnoc6yjehtres7RFTs-t4,37386
139
+ pi_ai/providers/data/kimi-coding.json,sha256=co1d22PvUhMFUgItWuL9E4_cEx_4VKyMOxDMqtNVqzk,3239
140
+ pi_ai/providers/data/manifest.json,sha256=iUos8c6WMzAnYVMkFlpdN3rSrUULT-BLPRgQ8Iwb5dA,3762
141
+ pi_ai/providers/data/meta.json,sha256=Vj9ewHlz9Sq4w-sm75GjatinnpULNxdJNWZs3LYkvzU,3358
142
+ pi_ai/providers/data/minimax-cn.json,sha256=G7-9EcPtvRQYQdPO8CfhIVchjxrskkd-FXchFsH6vno,1222
143
+ pi_ai/providers/data/minimax.json,sha256=pLaGS9l-3fV0my4Rf2Q-dR7CN0COjiS-yeL5R3gvokQ,1207
144
+ pi_ai/providers/data/mistral.json,sha256=J6pmxxoFBLU9yH7BlChvp-cLmXR_yN-bcJsjs1SK_lA,16484
145
+ pi_ai/providers/data/moonshotai-cn.json,sha256=eclYXchO5SXrrrvHizxV89Np7IhNT5Q0iPHgsU41h_U,2882
146
+ pi_ai/providers/data/moonshotai.json,sha256=HaLE408irvF6B8l02Fve6OG2i23HEuN2nJNbPx59rco,2870
147
+ pi_ai/providers/data/nvidia.json,sha256=mLR8TaJsjmSfSKh0YC_X6dyKVO4L20Dj0H_kkYmoQtI,13078
148
+ pi_ai/providers/data/openai-codex.json,sha256=dd_C-eSx4DmXjgadlMmDWV74_wLrZEgZAb7a5Yg7HT8,6476
149
+ pi_ai/providers/data/openai.json,sha256=NZjYe9OeQP5q5EsH7PP50nyy50XhFMiwwPsKOoTdjT4,29415
150
+ pi_ai/providers/data/opencode-go.json,sha256=OUCO5tpzAuMgLX97J9MdTVCgXDQL69faJe4jdV1QZHU,17403
151
+ pi_ai/providers/data/opencode.json,sha256=7PjGIlgknec47-4Jky8QaMP-r1VXedAZaqEp6oM53Sg,51667
152
+ pi_ai/providers/data/openrouter.json,sha256=0wPPjkrSz9Mi6l_IyeYX1Gsh022evgRUviauktkUQKo,282246
153
+ pi_ai/providers/data/qwen-token-plan-cn.json,sha256=JGmkCRxHTsPbCkmpli2NJybAdK2QZblrxODIeGHExsU,12210
154
+ pi_ai/providers/data/qwen-token-plan-individual.json,sha256=D7fPZPrznRo7CohCEKhshwhLgF7aFWRPXzkpMoe5Wd0,5782
155
+ pi_ai/providers/data/qwen-token-plan.json,sha256=7_EGIMtXcULeTsAmmNWWGnH9ov5PaufqlDK62daEQXY,12230
156
+ pi_ai/providers/data/radius.json,sha256=R8SfH_rykAyOHiPuYctMvowGauWaTi0BOTxcl3Kh2gQ,20309
157
+ pi_ai/providers/data/together.json,sha256=Uik99iGRyOeZrjYy-KsbP1LuYmruAoBncIZiezKGS_c,10944
158
+ pi_ai/providers/data/typesafe.json,sha256=pEKaL2ltXMUnOWmvYacxC9oH1r3NJ7-aycdsU0zENxY,291
159
+ pi_ai/providers/data/vercel-ai-gateway.json,sha256=FU3pglUt_5h0dk5ySYCq0Wfi_1i-BthHfyRWSU7x5Fg,154350
160
+ pi_ai/providers/data/xai.json,sha256=h5xJt4tmOlKiIKxO4BPnJrEMT1CqoDvFjuU6S1THaSg,2609
161
+ pi_ai/providers/data/xiaomi-token-plan-ams.json,sha256=gmbcVe9yAjQ3PU_1Q08LjUD2FDANnlAffVKTUBdTTII,2728
162
+ pi_ai/providers/data/xiaomi-token-plan-cn.json,sha256=B63picC9Hs9u2e3DLlYcDdKMMXlVuC9R56GHUIOQYwc,2720
163
+ pi_ai/providers/data/xiaomi-token-plan-sgp.json,sha256=avq1XIo3vEAYNUrWV8d08OZkrkTPeb77dDvFrj_D6bo,2728
164
+ pi_ai/providers/data/xiaomi.json,sha256=k_gbQOTQHwGT3QsZH2raK4UacdNRETBnmZqw-dw_c34,4002
165
+ pi_ai/providers/data/zai-coding-cn.json,sha256=7l7nBftuQTpgiNteNhbCf86AKo7ObDVfHbNUkNeH9hA,2672
166
+ pi_ai/providers/data/zai.json,sha256=WOZkL9-3NvC5pKJ3x2DFNqPOpmoDCrv7JhX3soUdXG8,4221
167
+ pi_ai/utils/__init__.py,sha256=1ECwZzIOxNKr8QUV7Sh1GGfrtpVM5TSzAglZUqO-Hzo,24
168
+ pi_ai/utils/callbacks.py,sha256=yvVaQa3b9Q_RSWMdFPQKho5kEkHjg-EbTIKULvHPNJ8,362
169
+ pi_ai/utils/diagnostics.py,sha256=jFzdaF3Trx4wVvpOOJLR_ZbBa7JA3tjdq2YKSOrty2I,2162
170
+ pi_ai/utils/error_body.py,sha256=t8GBbzggQ8y_VEbW76QA6kyRpF4Bde_be_8ssL8pwHo,2880
171
+ pi_ai/utils/estimate.py,sha256=MvRrwa0u1bZvWSDYmwu80V0w3o2mk6BMW_7MY2mfz3w,4181
172
+ pi_ai/utils/fastjson.py,sha256=zLNR1xu-lvOefVY9MvnN-FIgEmkslDftZ2WDHp_LMz8,2036
173
+ pi_ai/utils/http.py,sha256=XyYQdD9cL2FZnLTRrY8Aj2kOjFcWEILH4Cis9LXfHH8,14853
174
+ pi_ai/utils/json_parse.py,sha256=6C51vE09i4uiOd_WHLvyzWgwMRfHNTJJSCHUpAnkF1E,13944
175
+ pi_ai/utils/misc.py,sha256=w1njDN0eQZgJvHsXJtc4-CtUCxYn9O4YCszi3DvdW0s,6437
176
+ pi_ai/utils/model_operations.py,sha256=cMF3MxpF2XGk9wtE3GF6S3obdY1eFjZybLld4ujNkWw,2375
177
+ pi_ai/utils/models_error.py,sha256=IXrwE_4UL6_d2kZSIIacfpg24O97Qngn-mhosrh97qc,1118
178
+ pi_ai/utils/oauth_page.py,sha256=MHbzg0hK03vHCM2IAIQmxu5MaU5xiq_obtvolb04UHs,3332
179
+ pi_ai/utils/overflow.py,sha256=cKc-LSblymPsC7mkexedIZ_b_EiKKJbw0eSonPCyylM,4236
180
+ pi_ai/utils/retry.py,sha256=HuorzziNgb4MomDM14SVpzDnCbmOWwTVduoT0CDx0og,6790
181
+ pi_ai/utils/schema.py,sha256=LqzTqbY1c4R3yQ8A2FjfFDy9_nu80JU-7uorEuNisCw,10320
182
+ pi_ai/utils/text.py,sha256=LdNFizNF9EUnsKKKjsYbAcr9cOVB8cVEBa2wvC_7e9I,2384
183
+ pi_ai/utils/transcript.py,sha256=2R7RYM33Jvi30LZUfbuxfFSm19IxJQI24fITbW2-EyY,10407
184
+ pi_ai/utils/validation.py,sha256=rMU0SwDRYUbRHKYebyyN5F34IQWVW5RG0kHCP7PRjHU,31436
185
+ pi_ai_python-1.3.0.dist-info/METADATA,sha256=5PC8AjpuBRwONpbL4M-_NNCIqsDMAYwT1RDyEAbp0RE,7607
186
+ pi_ai_python-1.3.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
187
+ pi_ai_python-1.3.0.dist-info/entry_points.txt,sha256=r_ACNRaScPvBVYySO4_qxF4ww8PPfI5yTTFbrfS_uP0,41
188
+ pi_ai_python-1.3.0.dist-info/licenses/LICENSE,sha256=RPJB0q1HnYqFsnIyseOVq7QKC6U4BnobEd9i9y0CLFY,1161
189
+ pi_ai_python-1.3.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ pi-ai = pi_ai.cli:main
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Mario Zechner (pi, https://github.com/earendil-works/pi)
4
+ Copyright (c) 2026 nivalume (pi-py Python port)
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.