feat(models): adopt the typed Pi 1.0.2 catalog

This commit is contained in:
Kaede Akino committed 2026-10-04 22:23:41 +08:00
1 parent ad2bf28790
commit c46344a7c0
7 files changed
+56 -7

No files matched your search

Submodule AgentKit updated: e21235d864...d6f4692de8.
@@ -1,6 +1,7 @@
{
"models": [
{
"type": "chat",
"provider": "openai",
"id": "codex-auto-review",
"name": "Codex Auto-review",
+1 -1
View File
@@ -1 +1 @@
{"source":"https://github.com/badlogic/pi-mono/tree/d981de1229ef899957bbe968bc8dcda02a21f477/packages/ai","package":"@earendil-works/pi-ai","version":"0.85.1","commit":"d981de1229ef899957bbe968bc8dcda02a21f477","integrity":"sha512-+VgVIJDkDO2efYJKEEqvPTH4zmnIaXdAppGbO+vKFA9qy5PdhFiAenuFAkU+oiCSfOC4dMHDyrjdQeL4ZoC5CQ==","models":[{"provider":"amazon-bedrock","id":"amazon.nova-2-lite-v1:0","name":"Nova 2 Lite","reasoning":true,"input":["text","image"],"contextWindow":128000,"maxOutputTokens":4096,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"amazon.nova-lite-v1:0","name":"Nova Lite","reasoning":false,"input":["text","image"],"contextWindow":300000,"maxOutputTokens":8192,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"amazon.nova-micro-v1:0","name":"Nova Micro","reasoning":false,"input":["text"],"contextWindow":128000,"maxOutputTokens":8192,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"amazon.nova-pro-v1:0","name":"Nova Pro","reasoning":false,"input":["text","image"],"contextWindow":300000,"maxOutputTokens":8192,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"anthropic.claude-fable-5","name":"Claude Fable 5","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":["off"],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","id":"anthropic.claude-fable-5-1","name":"Claude Fable 5.1","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":["off"],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","id":"anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5","reasoning":true,"input":["text","image"],"contextWindow":200000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"anthropic.claude-opus-4-1-20250805-v1:0","name":"Claude Opus 4.1","reasoning":true,"input":["text","image"],"contextWindow":200000,"maxOutputTokens":32000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"anthropic.claude-opus-4-5-20251101-v1:0","name":"Claude Opus 4.5","reasoning":true,"input":["text","image"],"contextWindow":200000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"anthropic.claude-opus-4-6-v1","name":"Claude Opus 4.6","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"max":"max"}},{"provider":"amazon-bedrock","id":"anthropic.claude-opus-4-7","name":"Claude Opus 4.7","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","id":"anthropic.claude-opus-4-8","name":"Claude Opus 4.8","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","id":"anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5","reasoning":true,"input":["text","image"],"contextWindow":200000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{"max":"max"}},{"provider":"amazon-bedrock","id":"anthropic.claude-sonnet-5","name":"Claude Sonnet 5","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","id":"au.anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5 (AU)","reasoning":true,"input":["text","image"],"contextWindow":200000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","id":"au.anthropic.claude-opus-4-6-v1","name":"AU Anthropic Claude Opus 4.6","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"max":"max"}},{"provider":"amazon-bedrock","id":"au.anthropic.claude-opus-4-8","name":"Claude Opus 4.8 (AU)","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","id":"au.anthropic.claude-opus-5","name":"Claude Opus 5 (AU)","reasoning":true,"input":["text","image"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","id":"au.anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude SonneLine truncated
{"source":"https://github.com/badlogic/pi-mono/tree/cd32f7725fdbddbaecdff5b1e68491563394e0ca/packages/ai","package":"@earendil-works/pi-ai","version":"1.0.2","commit":"cd32f7725fdbddbaecdff5b1e68491563394e0ca","integrity":"sha512-JP59xGlSAQ/HhQ6EHN5qmneBlWfDyu6FPPryAvAaSo8A38ubAsEpS9YisCM5Jbbns0srrDffLZonE0OXorHI5A==","models":[{"provider":"amazon-bedrock","type":"chat","id":"amazon.nova-2-lite-v1:0","name":"Nova 2 Lite","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":65535,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"amazon.nova-lite-v1:0","name":"Nova Lite","reasoning":false,"input":["text","image"],"output":["text"],"contextWindow":300000,"maxOutputTokens":10000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"amazon.nova-micro-v1:0","name":"Nova Micro","reasoning":false,"input":["text"],"output":["text"],"contextWindow":128000,"maxOutputTokens":10000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"amazon.nova-pro-v1:0","name":"Nova Pro","reasoning":false,"input":["text","image"],"output":["text"],"contextWindow":300000,"maxOutputTokens":10000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-fable-5","name":"Claude Fable 5","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":["off"],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-fable-5-1","name":"Claude Fable 5.1","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":["off"],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-haiku-4-5-20251001-v1:0","name":"Claude Haiku 4.5","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":200000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-opus-4-1-20250805-v1:0","name":"Claude Opus 4.1","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":200000,"maxOutputTokens":32000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-opus-4-5-20251101-v1:0","name":"Claude Opus 4.5","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":200000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-opus-4-6-v1","name":"Claude Opus 4.6","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-opus-4-7","name":"Claude Opus 4.7","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-opus-4-8","name":"Claude Opus 4.8","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-opus-5-5","name":"Claude Opus 5.5","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-sonnet-4-5-20250929-v1:0","name":"Claude Sonnet 4.5","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":200000,"maxOutputTokens":64000,"unsupportedEfforts":[],"effortWireValues":{}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-sonnet-4-6","name":"Claude Sonnet 4.6","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-sonnet-5","name":"Claude Sonnet 5","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"anthropic.claude-sonnet-5-5","name":"Claude Sonnet 5.5","reasoning":true,"input":["text","image"],"output":["text"],"contextWindow":1000000,"maxOutputTokens":128000,"unsupportedEfforts":[],"effortWireValues":{"xhigh":"xhigh","max":"max"}},{"provider":"amazon-bedrock","type":"chat","id":"apac.amazon.nLine truncated
+7 -2
View File
@@ -24,6 +24,8 @@ commit=$(npm view "$package" gitHead)
integrity=$(npm view "$package" dist.integrity)
temporary="$temporary_dir/PiModelCatalog.json"
# Pi exposes some IDs through multiple APIs. Prefer their chat records because
# the assistant selects models by provider and ID, without an API-type suffix.
jq -cs \
--arg commit "$commit" \
--arg version "$version" \
@@ -34,7 +36,7 @@ jq -cs \
version: $version,
commit: $commit,
integrity: $integrity,
models: [
models: ([
.[]
| to_entries[]
| .value
@@ -42,10 +44,12 @@ jq -cs \
| .value
| {
provider,
type,
id,
name,
reasoning,
input,
output: (.output // (if .type == "image" then ["image"] else ["text"] end)),
contextWindow,
maxOutputTokens: .maxTokens,
unsupportedEfforts: (
@@ -58,7 +62,8 @@ jq -cs \
| with_entries(select(.value != null))
)
}
]
] | group_by([.provider, .id])
| map(min_by(if .type == "chat" then 0 elif .type == "image" then 1 else 2 end)))
}' "$data_dir"/*.json > "$temporary"
mv "$temporary" "$output"
+43
View File
@@ -0,0 +1,43 @@
import AgentKit
import Foundation
import Testing
@Suite
struct PiModelCatalogTests {
@Test
func bundledImageAndClassifierRecordsRemainOutsideAssistantPickers() {
var provider = ModelProvider(name: "OpenRouter")
provider.baseURL = "https://openrouter.ai/api/v1"
let image = ModelCapabilityResolver.resolve(
model: AIModel(id: "black-forest-labs/flux-3-image"), provider: provider
)
let classifier = ModelCapabilityResolver.resolve(
model: AIModel(id: "typesafe/jev-1.13"), provider: provider
)
#expect(image.catalogSource?.provider == "openrouter")
#expect(image.model.kind == .imageGeneration)
#expect(image.model.output == [.image])
#expect(image.model.abilities.isEmpty)
#expect(classifier.catalogSource?.provider == "openrouter")
#expect(classifier.model.kind == .classifier)
#expect(classifier.model.abilities.isEmpty)
provider.models = [image.model, classifier.model]
#expect(provider.assistantModels.isEmpty)
}
@Test
func sharedIDsPreferChatAndOverridesStillHideInternalModels() {
var provider = ModelProvider(name: "OpenRouter")
provider.baseURL = "https://openrouter.ai/api/v1"
let router = ModelCapabilityResolver.resolve(model: AIModel(id: "openrouter/auto"), provider: provider)
#expect(router.catalogSource?.provider == "openrouter")
#expect(router.model.kind == .chat)
#expect(router.model.abilities.contains(.toolCall))
provider.baseURL = "https://api.openai.com/v1"
let review = ModelCapabilityResolver.resolve(model: AIModel(id: "codex-auto-review"), provider: provider)
#expect(review.catalogSource?.provider == "openai")
#expect(review.model.isShownInAssistant == false)
#expect(review.model.abilities.contains(.reasoning))
}
}
+1 -1
View File
@@ -3003,7 +3003,7 @@
repositoryURL = "https://github.com/AkinoKaede/AgentKit.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 0.18.1;
minimumVersion = 0.19.0;
};
};
/* End XCRemoteSwiftPackageReference section */
@@ -15,8 +15,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/AkinoKaede/AgentKit.git",
"state" : {
"revision" : "e21235d8647a780e16a1c2c3b19cc00db5c82cb7",
"version" : "0.18.1"
"revision" : "d6f4692de8f30d8836b2e83ffcd5ddfcd7f1fdfc",
"version" : "0.19.0"
}
},
{