@homeflare/alchemy 0.43.0 → 0.45.0
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.
- package/README.md +10 -1
- package/dist/caddy/index.js +35 -1
- package/dist/caddy/index.js.map +3 -3
- package/dist/launchd/index.js +35 -1
- package/dist/launchd/index.js.map +3 -3
- package/dist/linux/index.js +35 -1
- package/dist/linux/index.js.map +3 -3
- package/dist/litellm/access-group-form.d.ts +26 -0
- package/dist/litellm/access-group-form.d.ts.map +1 -0
- package/dist/litellm/access-group-operations.d.ts +37 -0
- package/dist/litellm/access-group-operations.d.ts.map +1 -0
- package/dist/litellm/access-group-types.d.ts +49 -0
- package/dist/litellm/access-group-types.d.ts.map +1 -0
- package/dist/litellm/access-group.d.ts +55 -0
- package/dist/litellm/access-group.d.ts.map +1 -0
- package/dist/litellm/credential-errors.d.ts +131 -0
- package/dist/litellm/credential-errors.d.ts.map +1 -0
- package/dist/litellm/credential-form.d.ts +79 -0
- package/dist/litellm/credential-form.d.ts.map +1 -0
- package/dist/litellm/credential-operations.d.ts +84 -0
- package/dist/litellm/credential-operations.d.ts.map +1 -0
- package/dist/litellm/credential-rewrite.d.ts +6 -0
- package/dist/litellm/credential-rewrite.d.ts.map +1 -0
- package/dist/litellm/credential-types.d.ts +87 -0
- package/dist/litellm/credential-types.d.ts.map +1 -0
- package/dist/litellm/credential-values.d.ts +53 -0
- package/dist/litellm/credential-values.d.ts.map +1 -0
- package/dist/litellm/credential.d.ts +83 -0
- package/dist/litellm/credential.d.ts.map +1 -0
- package/dist/litellm/fake-access-group-litellm.d.ts +34 -0
- package/dist/litellm/fake-access-group-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-credential-litellm.d.ts +54 -0
- package/dist/litellm/fake-credential-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-keys.d.ts +53 -0
- package/dist/litellm/fake-keys.d.ts.map +1 -0
- package/dist/litellm/fake-litellm.d.ts +4 -1
- package/dist/litellm/fake-litellm.d.ts.map +1 -1
- package/dist/litellm/fake-mcp-litellm.d.ts +67 -0
- package/dist/litellm/fake-mcp-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-model-litellm-post-update.d.ts +49 -0
- package/dist/litellm/fake-model-litellm-post-update.d.ts.map +1 -0
- package/dist/litellm/fake-model-litellm.d.ts +48 -0
- package/dist/litellm/fake-model-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-policy-attachment-litellm.d.ts +33 -0
- package/dist/litellm/fake-policy-attachment-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-policy-litellm.d.ts +32 -0
- package/dist/litellm/fake-policy-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-registry-base.d.ts +42 -0
- package/dist/litellm/fake-registry-base.d.ts.map +1 -0
- package/dist/litellm/fake-stack.d.ts +8 -1
- package/dist/litellm/fake-stack.d.ts.map +1 -1
- package/dist/litellm/fake-team-litellm.d.ts +47 -0
- package/dist/litellm/fake-team-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-tool-litellm.d.ts +28 -0
- package/dist/litellm/fake-tool-litellm.d.ts.map +1 -0
- package/dist/litellm/fake-toolset-litellm.d.ts +29 -0
- package/dist/litellm/fake-toolset-litellm.d.ts.map +1 -0
- package/dist/litellm/index.d.ts +18 -0
- package/dist/litellm/index.d.ts.map +1 -1
- package/dist/litellm/index.js +3078 -2
- package/dist/litellm/index.js.map +65 -4
- package/dist/litellm/key-errors.d.ts +169 -0
- package/dist/litellm/key-errors.d.ts.map +1 -0
- package/dist/litellm/key-form.d.ts +119 -0
- package/dist/litellm/key-form.d.ts.map +1 -0
- package/dist/litellm/key-harness.d.ts +41 -0
- package/dist/litellm/key-harness.d.ts.map +1 -0
- package/dist/litellm/key-metadata-errors.d.ts +30 -0
- package/dist/litellm/key-metadata-errors.d.ts.map +1 -0
- package/dist/litellm/key-metadata.d.ts +22 -0
- package/dist/litellm/key-metadata.d.ts.map +1 -0
- package/dist/litellm/key-operations.d.ts +63 -0
- package/dist/litellm/key-operations.d.ts.map +1 -0
- package/dist/litellm/key-secret.d.ts +33 -0
- package/dist/litellm/key-secret.d.ts.map +1 -0
- package/dist/litellm/key.d.ts +78 -0
- package/dist/litellm/key.d.ts.map +1 -0
- package/dist/litellm/mcp-server-credential.d.ts +50 -0
- package/dist/litellm/mcp-server-credential.d.ts.map +1 -0
- package/dist/litellm/mcp-server-errors.d.ts +101 -0
- package/dist/litellm/mcp-server-errors.d.ts.map +1 -0
- package/dist/litellm/mcp-server-form.d.ts +56 -0
- package/dist/litellm/mcp-server-form.d.ts.map +1 -0
- package/dist/litellm/mcp-server-locate.d.ts +26 -0
- package/dist/litellm/mcp-server-locate.d.ts.map +1 -0
- package/dist/litellm/mcp-server-operations.d.ts +63 -0
- package/dist/litellm/mcp-server-operations.d.ts.map +1 -0
- package/dist/litellm/mcp-server-shadow.d.ts +24 -0
- package/dist/litellm/mcp-server-shadow.d.ts.map +1 -0
- package/dist/litellm/mcp-server-types.d.ts +118 -0
- package/dist/litellm/mcp-server-types.d.ts.map +1 -0
- package/dist/litellm/mcp-server-url.d.ts +11 -0
- package/dist/litellm/mcp-server-url.d.ts.map +1 -0
- package/dist/litellm/mcp-server.d.ts +95 -0
- package/dist/litellm/mcp-server.d.ts.map +1 -0
- package/dist/litellm/model-claim.d.ts +24 -0
- package/dist/litellm/model-claim.d.ts.map +1 -0
- package/dist/litellm/model-credential.d.ts +12 -0
- package/dist/litellm/model-credential.d.ts.map +1 -0
- package/dist/litellm/model-errors.d.ts +119 -0
- package/dist/litellm/model-errors.d.ts.map +1 -0
- package/dist/litellm/model-form.d.ts +78 -0
- package/dist/litellm/model-form.d.ts.map +1 -0
- package/dist/litellm/model-locate.d.ts +13 -0
- package/dist/litellm/model-locate.d.ts.map +1 -0
- package/dist/litellm/model-operations.d.ts +59 -0
- package/dist/litellm/model-operations.d.ts.map +1 -0
- package/dist/litellm/model-types.d.ts +91 -0
- package/dist/litellm/model-types.d.ts.map +1 -0
- package/dist/litellm/model.d.ts +88 -0
- package/dist/litellm/model.d.ts.map +1 -0
- package/dist/litellm/policy-attachment-form.d.ts +19 -0
- package/dist/litellm/policy-attachment-form.d.ts.map +1 -0
- package/dist/litellm/policy-attachment-operations.d.ts +31 -0
- package/dist/litellm/policy-attachment-operations.d.ts.map +1 -0
- package/dist/litellm/policy-attachment-types.d.ts +48 -0
- package/dist/litellm/policy-attachment-types.d.ts.map +1 -0
- package/dist/litellm/policy-attachment.d.ts +61 -0
- package/dist/litellm/policy-attachment.d.ts.map +1 -0
- package/dist/litellm/policy-form.d.ts +22 -0
- package/dist/litellm/policy-form.d.ts.map +1 -0
- package/dist/litellm/policy-operations.d.ts +42 -0
- package/dist/litellm/policy-operations.d.ts.map +1 -0
- package/dist/litellm/policy-types.d.ts +57 -0
- package/dist/litellm/policy-types.d.ts.map +1 -0
- package/dist/litellm/policy.d.ts +65 -0
- package/dist/litellm/policy.d.ts.map +1 -0
- package/dist/litellm/providers.d.ts +1 -1
- package/dist/litellm/providers.d.ts.map +1 -1
- package/dist/litellm/registry-errors.d.ts +62 -0
- package/dist/litellm/registry-errors.d.ts.map +1 -0
- package/dist/litellm/registry-support.d.ts +42 -0
- package/dist/litellm/registry-support.d.ts.map +1 -0
- package/dist/litellm/team-form.d.ts +26 -0
- package/dist/litellm/team-form.d.ts.map +1 -0
- package/dist/litellm/team-members.d.ts +10 -0
- package/dist/litellm/team-members.d.ts.map +1 -0
- package/dist/litellm/team-operations.d.ts +38 -0
- package/dist/litellm/team-operations.d.ts.map +1 -0
- package/dist/litellm/team-permission.d.ts +35 -0
- package/dist/litellm/team-permission.d.ts.map +1 -0
- package/dist/litellm/team-types.d.ts +101 -0
- package/dist/litellm/team-types.d.ts.map +1 -0
- package/dist/litellm/team.d.ts +67 -0
- package/dist/litellm/team.d.ts.map +1 -0
- package/dist/litellm/tool-policy-form.d.ts +21 -0
- package/dist/litellm/tool-policy-form.d.ts.map +1 -0
- package/dist/litellm/tool-policy-operations.d.ts +30 -0
- package/dist/litellm/tool-policy-operations.d.ts.map +1 -0
- package/dist/litellm/tool-policy-types.d.ts +46 -0
- package/dist/litellm/tool-policy-types.d.ts.map +1 -0
- package/dist/litellm/tool-policy.d.ts +62 -0
- package/dist/litellm/tool-policy.d.ts.map +1 -0
- package/dist/litellm/toolset-form.d.ts +20 -0
- package/dist/litellm/toolset-form.d.ts.map +1 -0
- package/dist/litellm/toolset-operations.d.ts +39 -0
- package/dist/litellm/toolset-operations.d.ts.map +1 -0
- package/dist/litellm/toolset-types.d.ts +46 -0
- package/dist/litellm/toolset-types.d.ts.map +1 -0
- package/dist/litellm/toolset.d.ts +55 -0
- package/dist/litellm/toolset.d.ts.map +1 -0
- package/dist/openbao/index.js +35 -1
- package/dist/openbao/index.js.map +3 -3
- package/dist/ownership/rows.d.ts +11 -0
- package/dist/ownership/rows.d.ts.map +1 -1
- package/dist/postgres/connection.d.ts +14 -2
- package/dist/postgres/connection.d.ts.map +1 -1
- package/dist/postgres/database-sql.d.ts +27 -8
- package/dist/postgres/database-sql.d.ts.map +1 -1
- package/dist/postgres/fake-grants-parse.d.ts +37 -0
- package/dist/postgres/fake-grants-parse.d.ts.map +1 -0
- package/dist/postgres/fake-grants-read.d.ts +61 -0
- package/dist/postgres/fake-grants-read.d.ts.map +1 -0
- package/dist/postgres/fake-grants-sql.d.ts +46 -0
- package/dist/postgres/fake-grants-sql.d.ts.map +1 -0
- package/dist/postgres/fake-grants-write.d.ts +29 -0
- package/dist/postgres/fake-grants-write.d.ts.map +1 -0
- package/dist/postgres/fake-role-sql.d.ts +41 -0
- package/dist/postgres/fake-role-sql.d.ts.map +1 -0
- package/dist/postgres/fake-schema-sql.d.ts +42 -0
- package/dist/postgres/fake-schema-sql.d.ts.map +1 -0
- package/dist/postgres/fake-sql-parse.d.ts +23 -0
- package/dist/postgres/fake-sql-parse.d.ts.map +1 -0
- package/dist/postgres/fake-sql-quote.d.ts +12 -0
- package/dist/postgres/fake-sql-quote.d.ts.map +1 -0
- package/dist/postgres/fake-sql.d.ts +42 -0
- package/dist/postgres/fake-sql.d.ts.map +1 -1
- package/dist/postgres/grants-attrs.d.ts +115 -0
- package/dist/postgres/grants-attrs.d.ts.map +1 -0
- package/dist/postgres/grants-declare.d.ts +88 -0
- package/dist/postgres/grants-declare.d.ts.map +1 -0
- package/dist/postgres/grants-diff.d.ts +25 -0
- package/dist/postgres/grants-diff.d.ts.map +1 -0
- package/dist/postgres/grants-errors.d.ts +137 -0
- package/dist/postgres/grants-errors.d.ts.map +1 -0
- package/dist/postgres/grants-existence.d.ts +14 -0
- package/dist/postgres/grants-existence.d.ts.map +1 -0
- package/dist/postgres/grants-ops.d.ts +65 -0
- package/dist/postgres/grants-ops.d.ts.map +1 -0
- package/dist/postgres/grants-ownership.d.ts +18 -0
- package/dist/postgres/grants-ownership.d.ts.map +1 -0
- package/dist/postgres/grants-plan-restore.d.ts +22 -0
- package/dist/postgres/grants-plan-restore.d.ts.map +1 -0
- package/dist/postgres/grants-plan.d.ts +65 -0
- package/dist/postgres/grants-plan.d.ts.map +1 -0
- package/dist/postgres/grants-read-defaults.d.ts +17 -0
- package/dist/postgres/grants-read-defaults.d.ts.map +1 -0
- package/dist/postgres/grants-read.d.ts +77 -0
- package/dist/postgres/grants-read.d.ts.map +1 -0
- package/dist/postgres/grants-refuse.d.ts +25 -0
- package/dist/postgres/grants-refuse.d.ts.map +1 -0
- package/dist/postgres/grants-sql.d.ts +42 -0
- package/dist/postgres/grants-sql.d.ts.map +1 -0
- package/dist/postgres/grants-words.d.ts +29 -0
- package/dist/postgres/grants-words.d.ts.map +1 -0
- package/dist/postgres/grants.d.ts +37 -0
- package/dist/postgres/grants.d.ts.map +1 -0
- package/dist/postgres/index.d.ts +31 -6
- package/dist/postgres/index.d.ts.map +1 -1
- package/dist/postgres/index.js +1998 -37
- package/dist/postgres/index.js.map +46 -7
- package/dist/postgres/installed-classifier.d.ts +13 -0
- package/dist/postgres/installed-classifier.d.ts.map +1 -0
- package/dist/postgres/providers.d.ts +16 -8
- package/dist/postgres/providers.d.ts.map +1 -1
- package/dist/postgres/psql-executor.d.ts +4 -0
- package/dist/postgres/psql-executor.d.ts.map +1 -1
- package/dist/postgres/role-attrs.d.ts +112 -0
- package/dist/postgres/role-attrs.d.ts.map +1 -0
- package/dist/postgres/role-diff.d.ts +22 -0
- package/dist/postgres/role-diff.d.ts.map +1 -0
- package/dist/postgres/role-errors.d.ts +132 -0
- package/dist/postgres/role-errors.d.ts.map +1 -0
- package/dist/postgres/role-membership-sql.d.ts +78 -0
- package/dist/postgres/role-membership-sql.d.ts.map +1 -0
- package/dist/postgres/role-provider.d.ts +11 -0
- package/dist/postgres/role-provider.d.ts.map +1 -0
- package/dist/postgres/role-scram.d.ts +8 -0
- package/dist/postgres/role-scram.d.ts.map +1 -0
- package/dist/postgres/role-secrets.d.ts +38 -0
- package/dist/postgres/role-secrets.d.ts.map +1 -0
- package/dist/postgres/role-sql.d.ts +68 -0
- package/dist/postgres/role-sql.d.ts.map +1 -0
- package/dist/postgres/role.d.ts +57 -0
- package/dist/postgres/role.d.ts.map +1 -0
- package/dist/postgres/schema-assert.d.ts +50 -0
- package/dist/postgres/schema-assert.d.ts.map +1 -0
- package/dist/postgres/schema-attrs.d.ts +51 -0
- package/dist/postgres/schema-attrs.d.ts.map +1 -0
- package/dist/postgres/schema-delete.d.ts +28 -0
- package/dist/postgres/schema-delete.d.ts.map +1 -0
- package/dist/postgres/schema-diff.d.ts +14 -0
- package/dist/postgres/schema-diff.d.ts.map +1 -0
- package/dist/postgres/schema-errors.d.ts +139 -0
- package/dist/postgres/schema-errors.d.ts.map +1 -0
- package/dist/postgres/schema-identity.d.ts +8 -0
- package/dist/postgres/schema-identity.d.ts.map +1 -0
- package/dist/postgres/schema-reconcile.d.ts +12 -0
- package/dist/postgres/schema-reconcile.d.ts.map +1 -0
- package/dist/postgres/schema-sql.d.ts +45 -0
- package/dist/postgres/schema-sql.d.ts.map +1 -0
- package/dist/postgres/schema-test-kit.d.ts +67 -0
- package/dist/postgres/schema-test-kit.d.ts.map +1 -0
- package/dist/postgres/schema.d.ts +54 -0
- package/dist/postgres/schema.d.ts.map +1 -0
- package/dist/proxmox/index.js +35 -1
- package/dist/proxmox/index.js.map +3 -3
- package/dist/release/fake-engine.d.ts +10 -0
- package/dist/release/fake-engine.d.ts.map +1 -1
- package/dist/release/index.js +35 -1
- package/dist/release/index.js.map +3 -3
- package/dist/valkey/acl-attrs.d.ts +94 -0
- package/dist/valkey/acl-attrs.d.ts.map +1 -0
- package/dist/valkey/acl-compare.d.ts +28 -0
- package/dist/valkey/acl-compare.d.ts.map +1 -0
- package/dist/valkey/acl-connection.d.ts +6 -0
- package/dist/valkey/acl-connection.d.ts.map +1 -0
- package/dist/valkey/acl-form.d.ts +62 -0
- package/dist/valkey/acl-form.d.ts.map +1 -0
- package/dist/valkey/acl-managed.d.ts +4 -0
- package/dist/valkey/acl-managed.d.ts.map +1 -0
- package/dist/valkey/acl-ops.d.ts +37 -0
- package/dist/valkey/acl-ops.d.ts.map +1 -0
- package/dist/valkey/acl-profiles.d.ts +53 -0
- package/dist/valkey/acl-profiles.d.ts.map +1 -0
- package/dist/valkey/acl-reconcile.d.ts +26 -0
- package/dist/valkey/acl-reconcile.d.ts.map +1 -0
- package/dist/valkey/acl.d.ts +24 -0
- package/dist/valkey/acl.d.ts.map +1 -0
- package/dist/valkey/connection-service.d.ts +22 -0
- package/dist/valkey/connection-service.d.ts.map +1 -0
- package/dist/valkey/connection.d.ts +59 -0
- package/dist/valkey/connection.d.ts.map +1 -0
- package/dist/valkey/errors.d.ts +165 -0
- package/dist/valkey/errors.d.ts.map +1 -0
- package/dist/valkey/fake-acl.d.ts +29 -0
- package/dist/valkey/fake-acl.d.ts.map +1 -0
- package/dist/valkey/fake-valkey.d.ts +35 -0
- package/dist/valkey/fake-valkey.d.ts.map +1 -0
- package/dist/valkey/handler-test-fixture.d.ts +20 -0
- package/dist/valkey/handler-test-fixture.d.ts.map +1 -0
- package/dist/valkey/index.d.ts +18 -0
- package/dist/valkey/index.d.ts.map +1 -0
- package/dist/valkey/index.js +964 -0
- package/dist/valkey/index.js.map +27 -0
- package/dist/valkey/instance-attrs.d.ts +46 -0
- package/dist/valkey/instance-attrs.d.ts.map +1 -0
- package/dist/valkey/instance-form.d.ts +22 -0
- package/dist/valkey/instance-form.d.ts.map +1 -0
- package/dist/valkey/instance.d.ts +48 -0
- package/dist/valkey/instance.d.ts.map +1 -0
- package/dist/valkey/provider-socket-fixture.d.ts +8 -0
- package/dist/valkey/provider-socket-fixture.d.ts.map +1 -0
- package/dist/valkey/providers.d.ts +16 -0
- package/dist/valkey/providers.d.ts.map +1 -0
- package/dist/valkey/resp.d.ts +38 -0
- package/dist/valkey/resp.d.ts.map +1 -0
- package/dist/valkey/transport-error.d.ts +36 -0
- package/dist/valkey/transport-error.d.ts.map +1 -0
- package/dist/valkey/transport.d.ts +50 -0
- package/dist/valkey/transport.d.ts.map +1 -0
- package/docs/litellm-access-group.md +105 -0
- package/docs/litellm-credential.md +60 -0
- package/docs/litellm-key-metadata.md +56 -0
- package/docs/litellm-key.md +194 -0
- package/docs/litellm-mcp.md +187 -0
- package/docs/litellm-model.md +111 -0
- package/docs/litellm-policy-attachment.md +86 -0
- package/docs/litellm-policy.md +103 -0
- package/docs/litellm-team.md +117 -0
- package/docs/litellm-tool-policy.md +90 -0
- package/docs/litellm-toolset.md +92 -0
- package/docs/litellm.md +16 -9
- package/docs/peers.md +15 -6
- package/docs/postgres-grants-example.md +55 -0
- package/docs/postgres-grants.md +157 -0
- package/docs/postgres-role.md +126 -0
- package/docs/postgres-schema.md +139 -0
- package/docs/postgres.md +20 -3
- package/docs/valkey-transport.md +29 -0
- package/docs/valkey.md +187 -0
- package/package.json +6 -2
- package/src/ceph/ceph-argv.test.ts +1 -1
- package/src/launchd/sudo-allowlist.test.ts +2 -2
- package/src/linux/sudo-allowlist.test.ts +3 -3
- package/src/linux/sudo-runner.test.ts +2 -2
- package/src/litellm/access-group-form.ts +105 -0
- package/src/litellm/access-group-operations.ts +92 -0
- package/src/litellm/access-group-types.ts +49 -0
- package/src/litellm/access-group.test.ts +197 -0
- package/src/litellm/access-group.ts +151 -0
- package/src/litellm/credential-errors.ts +183 -0
- package/src/litellm/credential-form.test.ts +151 -0
- package/src/litellm/credential-form.ts +211 -0
- package/src/litellm/credential-guards.test.ts +241 -0
- package/src/litellm/credential-operations.ts +208 -0
- package/src/litellm/credential-recovery.test.ts +93 -0
- package/src/litellm/credential-rewrite.test.ts +164 -0
- package/src/litellm/credential-rewrite.ts +50 -0
- package/src/litellm/credential-types.ts +117 -0
- package/src/litellm/credential-values.ts +94 -0
- package/src/litellm/credential.test.ts +218 -0
- package/src/litellm/credential.ts +227 -0
- package/src/litellm/fake-access-group-litellm.ts +127 -0
- package/src/litellm/fake-credential-litellm.ts +216 -0
- package/src/litellm/fake-keys.ts +190 -0
- package/src/litellm/fake-litellm.ts +19 -9
- package/src/litellm/fake-mcp-litellm.ts +214 -0
- package/src/litellm/fake-model-litellm-post-update.ts +103 -0
- package/src/litellm/fake-model-litellm.ts +233 -0
- package/src/litellm/fake-policy-attachment-litellm.ts +97 -0
- package/src/litellm/fake-policy-litellm.ts +186 -0
- package/src/litellm/fake-registry-base.ts +69 -0
- package/src/litellm/fake-stack.ts +17 -1
- package/src/litellm/fake-team-litellm.ts +229 -0
- package/src/litellm/fake-tool-litellm.ts +88 -0
- package/src/litellm/fake-toolset-litellm.ts +110 -0
- package/src/litellm/index.ts +140 -0
- package/src/litellm/key-delete.test.ts +212 -0
- package/src/litellm/key-errors.ts +241 -0
- package/src/litellm/key-form.ts +200 -0
- package/src/litellm/key-harness.ts +121 -0
- package/src/litellm/key-metadata-errors.ts +49 -0
- package/src/litellm/key-metadata.test.ts +156 -0
- package/src/litellm/key-metadata.ts +74 -0
- package/src/litellm/key-operations.ts +184 -0
- package/src/litellm/key-rotation.test.ts +110 -0
- package/src/litellm/key-scope.test.ts +135 -0
- package/src/litellm/key-secret.test.ts +248 -0
- package/src/litellm/key-secret.ts +137 -0
- package/src/litellm/key-transport.test.ts +166 -0
- package/src/litellm/key.test.ts +231 -0
- package/src/litellm/key.ts +213 -0
- package/src/litellm/mcp-server-adopt.test.ts +86 -0
- package/src/litellm/mcp-server-alias.test.ts +184 -0
- package/src/litellm/mcp-server-credential.ts +85 -0
- package/src/litellm/mcp-server-errors.ts +141 -0
- package/src/litellm/mcp-server-exports.test.ts +15 -0
- package/src/litellm/mcp-server-form.test.ts +241 -0
- package/src/litellm/mcp-server-form.ts +233 -0
- package/src/litellm/mcp-server-handlers.test.ts +150 -0
- package/src/litellm/mcp-server-locate.ts +66 -0
- package/src/litellm/mcp-server-operations.ts +111 -0
- package/src/litellm/mcp-server-registry.test.ts +146 -0
- package/src/litellm/mcp-server-retype.test.ts +114 -0
- package/src/litellm/mcp-server-shadow.test.ts +91 -0
- package/src/litellm/mcp-server-shadow.ts +45 -0
- package/src/litellm/mcp-server-tools.test.ts +85 -0
- package/src/litellm/mcp-server-types.ts +143 -0
- package/src/litellm/mcp-server-url.ts +66 -0
- package/src/litellm/mcp-server.test.ts +213 -0
- package/src/litellm/mcp-server.ts +225 -0
- package/src/litellm/model-claim.ts +69 -0
- package/src/litellm/model-credential.ts +45 -0
- package/src/litellm/model-errors.ts +168 -0
- package/src/litellm/model-foreign-row.test.ts +173 -0
- package/src/litellm/model-form.test.ts +228 -0
- package/src/litellm/model-form.ts +223 -0
- package/src/litellm/model-locate.test.ts +128 -0
- package/src/litellm/model-locate.ts +67 -0
- package/src/litellm/model-operations.test.ts +93 -0
- package/src/litellm/model-operations.ts +146 -0
- package/src/litellm/model-params-preserve.test.ts +119 -0
- package/src/litellm/model-recovery.test.ts +57 -0
- package/src/litellm/model-types.ts +112 -0
- package/src/litellm/model.test.ts +222 -0
- package/src/litellm/model.ts +237 -0
- package/src/litellm/policy-attachment-form.ts +103 -0
- package/src/litellm/policy-attachment-operations.ts +74 -0
- package/src/litellm/policy-attachment-types.ts +48 -0
- package/src/litellm/policy-attachment.test.ts +198 -0
- package/src/litellm/policy-attachment.ts +178 -0
- package/src/litellm/policy-form.ts +122 -0
- package/src/litellm/policy-operations.ts +112 -0
- package/src/litellm/policy-types.ts +58 -0
- package/src/litellm/policy.test.ts +214 -0
- package/src/litellm/policy.ts +146 -0
- package/src/litellm/providers.ts +24 -3
- package/src/litellm/registry-errors.ts +88 -0
- package/src/litellm/registry-exports.test.ts +66 -0
- package/src/litellm/registry-support.ts +109 -0
- package/src/litellm/team-form.ts +140 -0
- package/src/litellm/team-members.test.ts +150 -0
- package/src/litellm/team-members.ts +58 -0
- package/src/litellm/team-operations.ts +90 -0
- package/src/litellm/team-permission.ts +159 -0
- package/src/litellm/team-read.test.ts +89 -0
- package/src/litellm/team-types.ts +106 -0
- package/src/litellm/team.test.ts +206 -0
- package/src/litellm/team.ts +159 -0
- package/src/litellm/tool-policy-form.ts +94 -0
- package/src/litellm/tool-policy-operations.ts +58 -0
- package/src/litellm/tool-policy-types.ts +48 -0
- package/src/litellm/tool-policy.test.ts +172 -0
- package/src/litellm/tool-policy.ts +125 -0
- package/src/litellm/toolset-form.ts +104 -0
- package/src/litellm/toolset-operations.ts +90 -0
- package/src/litellm/toolset-types.ts +47 -0
- package/src/litellm/toolset.test.ts +198 -0
- package/src/litellm/toolset.ts +151 -0
- package/src/ownership/ownership.test.ts +33 -1
- package/src/ownership/rows.ts +53 -0
- package/src/postgres/connection.ts +42 -7
- package/src/postgres/database-bigint-serialization.test.ts +1 -0
- package/src/postgres/database-refusals.test.ts +2 -2
- package/src/postgres/database-sql.ts +36 -9
- package/src/postgres/fake-grants-parse.ts +189 -0
- package/src/postgres/fake-grants-read.ts +250 -0
- package/src/postgres/fake-grants-sql.ts +207 -0
- package/src/postgres/fake-grants-write.ts +90 -0
- package/src/postgres/fake-role-sql.ts +240 -0
- package/src/postgres/fake-schema-semantics.test.ts +36 -0
- package/src/postgres/fake-schema-sql.ts +146 -0
- package/src/postgres/fake-sql-parse.ts +86 -0
- package/src/postgres/fake-sql-quote.ts +36 -0
- package/src/postgres/fake-sql.ts +166 -46
- package/src/postgres/fixtures/pg-REL_18_6-acl.h.txt +147 -0
- package/src/postgres/fixtures/pg-REL_18_6-aclexplode-func.txt +31 -0
- package/src/postgres/fixtures/pg-REL_18_6-alter-default-privileges-synopsis.txt +82 -0
- package/src/postgres/fixtures/pg-REL_18_6-alter_role.sgml.txt +44 -0
- package/src/postgres/fixtures/pg-REL_18_6-create_role.sgml.txt +26 -0
- package/src/postgres/fixtures/pg-REL_18_6-grant-synopsis.txt +95 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_attribute.h.txt +24 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_auth_members.h.txt +62 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_authid.h.txt +70 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_class.h.txt +33 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_default_acl.h.txt +81 -0
- package/src/postgres/fixtures/pg-REL_18_6-pg_namespace.h.txt +28 -0
- package/src/postgres/fixtures/pg-REL_18_6-revoke-synopsis.txt +124 -0
- package/src/postgres/grants-acl.test.ts +61 -0
- package/src/postgres/grants-attrs.ts +185 -0
- package/src/postgres/grants-database.test.ts +158 -0
- package/src/postgres/grants-declare.ts +172 -0
- package/src/postgres/grants-delete-proof.test.ts +154 -0
- package/src/postgres/grants-diff.ts +101 -0
- package/src/postgres/grants-errors.ts +215 -0
- package/src/postgres/grants-existence-guards.test.ts +113 -0
- package/src/postgres/grants-existence.ts +101 -0
- package/src/postgres/grants-lifecycle-guards.test.ts +208 -0
- package/src/postgres/grants-lifecycle-repair.test.ts +208 -0
- package/src/postgres/grants-lifecycle.test.ts +181 -0
- package/src/postgres/grants-ops.ts +229 -0
- package/src/postgres/grants-owner-revoke.test.ts +121 -0
- package/src/postgres/grants-ownership.ts +49 -0
- package/src/postgres/grants-plan-collateral.test.ts +202 -0
- package/src/postgres/grants-plan-diff.test.ts +204 -0
- package/src/postgres/grants-plan-restore.ts +43 -0
- package/src/postgres/grants-plan-revocations.test.ts +69 -0
- package/src/postgres/grants-plan.test.ts +148 -0
- package/src/postgres/grants-plan.ts +245 -0
- package/src/postgres/grants-provenance.test.ts +134 -0
- package/src/postgres/grants-psql-lifecycle.test.ts +105 -0
- package/src/postgres/grants-read-absent.test.ts +91 -0
- package/src/postgres/grants-read-defaults.ts +51 -0
- package/src/postgres/grants-read.ts +250 -0
- package/src/postgres/grants-refusals.test.ts +136 -0
- package/src/postgres/grants-refuse.ts +119 -0
- package/src/postgres/grants-relkind-wire.test.ts +111 -0
- package/src/postgres/grants-repair-plan.test.ts +201 -0
- package/src/postgres/grants-sql.test.ts +128 -0
- package/src/postgres/grants-sql.ts +144 -0
- package/src/postgres/grants-words.ts +34 -0
- package/src/postgres/grants.ts +110 -0
- package/src/postgres/index.ts +129 -5
- package/src/postgres/installed-classifier.ts +36 -0
- package/src/postgres/providers.ts +33 -9
- package/src/postgres/psql-executor-escaping.test.ts +67 -0
- package/src/postgres/psql-executor.test.ts +63 -2
- package/src/postgres/psql-executor.ts +74 -34
- package/src/postgres/role-adopt.test.ts +98 -0
- package/src/postgres/role-attrs.ts +137 -0
- package/src/postgres/role-diff.ts +93 -0
- package/src/postgres/role-errors.ts +206 -0
- package/src/postgres/role-guard.test.ts +60 -0
- package/src/postgres/role-identity.test.ts +197 -0
- package/src/postgres/role-lifecycle.test.ts +228 -0
- package/src/postgres/role-membership-options.test.ts +73 -0
- package/src/postgres/role-membership-repair.test.ts +153 -0
- package/src/postgres/role-membership-sql.ts +223 -0
- package/src/postgres/role-password-ascii.test.ts +53 -0
- package/src/postgres/role-password-transports.test.ts +123 -0
- package/src/postgres/role-password.test.ts +158 -0
- package/src/postgres/role-privilege.test.ts +107 -0
- package/src/postgres/role-provenance.test.ts +200 -0
- package/src/postgres/role-provider.ts +105 -0
- package/src/postgres/role-refusals.test.ts +225 -0
- package/src/postgres/role-scram.test.ts +38 -0
- package/src/postgres/role-scram.ts +40 -0
- package/src/postgres/role-secrets.ts +61 -0
- package/src/postgres/role-sql.ts +213 -0
- package/src/postgres/role-valid-until.test.ts +68 -0
- package/src/postgres/role.ts +226 -0
- package/src/postgres/schema-assert.ts +139 -0
- package/src/postgres/schema-attrs.ts +71 -0
- package/src/postgres/schema-delete-proofs.test.ts +192 -0
- package/src/postgres/schema-delete.ts +96 -0
- package/src/postgres/schema-diff.ts +44 -0
- package/src/postgres/schema-drop-2bp01.test.ts +146 -0
- package/src/postgres/schema-errors.ts +209 -0
- package/src/postgres/schema-handlers.test.ts +193 -0
- package/src/postgres/schema-identity.ts +39 -0
- package/src/postgres/schema-lifecycle.test.ts +246 -0
- package/src/postgres/schema-race.test.ts +70 -0
- package/src/postgres/schema-reconcile.ts +100 -0
- package/src/postgres/schema-refusals.test.ts +144 -0
- package/src/postgres/schema-socket.test.ts +162 -0
- package/src/postgres/schema-sql.ts +130 -0
- package/src/postgres/schema-takeover.test.ts +149 -0
- package/src/postgres/schema-test-kit.ts +85 -0
- package/src/postgres/schema.ts +130 -0
- package/src/release/binary-alias.test.ts +3 -3
- package/src/release/binary-claims.test.ts +3 -3
- package/src/release/binary-directory-umask.test.ts +65 -0
- package/src/release/fake-engine.ts +15 -0
- package/src/valkey/acl-attrs.ts +98 -0
- package/src/valkey/acl-compare.ts +57 -0
- package/src/valkey/acl-connection.ts +13 -0
- package/src/valkey/acl-delete.test.ts +127 -0
- package/src/valkey/acl-form.ts +239 -0
- package/src/valkey/acl-managed.ts +13 -0
- package/src/valkey/acl-ops.ts +122 -0
- package/src/valkey/acl-ownership.test.ts +118 -0
- package/src/valkey/acl-prefix.test.ts +38 -0
- package/src/valkey/acl-profiles.ts +81 -0
- package/src/valkey/acl-reconcile.ts +180 -0
- package/src/valkey/acl-reserved.test.ts +69 -0
- package/src/valkey/acl-revocation.test.ts +94 -0
- package/src/valkey/acl-seat-prefix.test.ts +111 -0
- package/src/valkey/acl-validation.test.ts +54 -0
- package/src/valkey/acl.test.ts +215 -0
- package/src/valkey/acl.ts +169 -0
- package/src/valkey/connection-service.ts +46 -0
- package/src/valkey/connection.ts +180 -0
- package/src/valkey/errors.ts +239 -0
- package/src/valkey/fake-acl.ts +128 -0
- package/src/valkey/fake-valkey.ts +224 -0
- package/src/valkey/handler-test-fixture.ts +43 -0
- package/src/valkey/handlers.test.ts +205 -0
- package/src/valkey/index.ts +54 -0
- package/src/valkey/instance-attrs.ts +48 -0
- package/src/valkey/instance-form.ts +104 -0
- package/src/valkey/instance.test.ts +108 -0
- package/src/valkey/instance.ts +160 -0
- package/src/valkey/provider-socket-fixture.ts +71 -0
- package/src/valkey/providers.test.ts +129 -0
- package/src/valkey/providers.ts +21 -0
- package/src/valkey/resp.ts +212 -0
- package/src/valkey/transport-bounds.test.ts +150 -0
- package/src/valkey/transport-error.ts +37 -0
- package/src/valkey/transport.test.ts +158 -0
- package/src/valkey/transport.ts +109 -0
- package/src/valkey/upstream-bounds.test.ts +14 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a stateless `LiteLLM.Model` reconcile may write the live row it found.
|
|
3
|
+
*
|
|
4
|
+
* ⛔ A ROW WITH NO SEAL IS NOT YET THIS GENERATION'S. `output` is undefined on a create and on a
|
|
5
|
+
* `replacing` row Apply committed before reconcile (Apply.ts), and a probe result carries
|
|
6
|
+
* `paramsSeal: ''`. Either way the live row may belong to someone else.
|
|
7
|
+
* ★ TWO ROWS THAT LOOK THE SAME AND ARE NOT. A deterministic id this declaration would create is
|
|
8
|
+
* ours by construction. An older generation's `attr.id` (ownership/rows.ts) is our own serving
|
|
9
|
+
* deployment from before this replacement — recording it here makes destroy() delete it. A
|
|
10
|
+
* declared id needs `--adopt` on a create or an unfinished generation; an unpinned row with any
|
|
11
|
+
* other id is adopted only on a create (ownership/adopt.ts).
|
|
12
|
+
*/
|
|
13
|
+
import * as Effect from 'effect/Effect';
|
|
14
|
+
import { LitellmModelForeignRowError, LitellmModelPriorGenerationError } from './model-errors.ts';
|
|
15
|
+
import type { ModelAttributes, ModelProps } from './model-types.ts';
|
|
16
|
+
export declare const claimStatelessRow: (args: {
|
|
17
|
+
readonly fqn: string;
|
|
18
|
+
readonly instanceId: string;
|
|
19
|
+
readonly output: ModelAttributes | undefined;
|
|
20
|
+
readonly news: ModelProps;
|
|
21
|
+
readonly beforeId: string;
|
|
22
|
+
readonly wanted: string;
|
|
23
|
+
}) => Effect.Effect<void, LitellmModelPriorGenerationError | LitellmModelForeignRowError>;
|
|
24
|
+
//# sourceMappingURL=model-claim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-claim.d.ts","sourceRoot":"","sources":["../../src/litellm/model-claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE,eAAO,MAAM,iBAAiB,SAAU;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gCAAgC,GAAG,2BAA2B,CAyClF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ModelProps } from './model-types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The declared `litellm_params` as the reference form names them — the input to the seal. `model`
|
|
4
|
+
* and `api_base` are what the proxy routes on; `api_key` is the reference LiteLLM resolves in its
|
|
5
|
+
* own environment. No value, ever: there is no lookup and no environment here.
|
|
6
|
+
*/
|
|
7
|
+
export declare const declaredValues: (props: ModelProps) => Record<string, string>;
|
|
8
|
+
/** `scrypt:<salt>:<digest>` of declared values, for `paramsSeal`. ⛔ Never a secret value. */
|
|
9
|
+
export declare const sealFromValues: (values: Record<string, string>) => string;
|
|
10
|
+
/** Whether the declaration's values are the ones `sealed` was made from. */
|
|
11
|
+
export declare const sealState: (props: ModelProps, sealed: string) => 'match' | 'stale';
|
|
12
|
+
//# sourceMappingURL=model-credential.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-credential.d.ts","sourceRoot":"","sources":["../../src/litellm/model-credential.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,cAAc,UAAW,UAAU,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAKvE,CAAC;AAEF,6FAA6F;AAC7F,eAAO,MAAM,cAAc,WAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAAsB,CAAC;AAEvF,4EAA4E;AAC5E,eAAO,MAAM,SAAS,UAAW,UAAU,UAAU,MAAM,KAAG,OAAO,GAAG,OACR,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The typed refusals `LiteLLM.Model` raises on top of `@distilled.cloud/litellm`'s own SDK errors.
|
|
3
|
+
*
|
|
4
|
+
* ⛔ NO MESSAGE HERE MAY CARRY A CREDENTIAL: only names, ids, field names and the NAME of an
|
|
5
|
+
* environment variable, exactly like mcp-server-errors.ts.
|
|
6
|
+
*/
|
|
7
|
+
import type { BadRequest, NotFound } from '@distilled.cloud/litellm/Errors';
|
|
8
|
+
import type * as models from '@distilled.cloud/litellm/model_management';
|
|
9
|
+
declare const LitellmModelInvalidError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
10
|
+
readonly _tag: "LitellmModelInvalidError";
|
|
11
|
+
} & Readonly<A>;
|
|
12
|
+
/** A declaration the resource refuses before any request: a combination nobody meant. */
|
|
13
|
+
export declare class LitellmModelInvalidError extends LitellmModelInvalidError_base<{
|
|
14
|
+
readonly modelName: string;
|
|
15
|
+
readonly problem: string;
|
|
16
|
+
}> {
|
|
17
|
+
get message(): string;
|
|
18
|
+
}
|
|
19
|
+
declare const LitellmModelAmbiguousNameError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
20
|
+
readonly _tag: "LitellmModelAmbiguousNameError";
|
|
21
|
+
} & Readonly<A>;
|
|
22
|
+
/**
|
|
23
|
+
* More than one live deployment carries the declared `model_name`, so adopt-by-name cannot say
|
|
24
|
+
* which one is meant — LiteLLM runs several deployments under one group name on purpose. Declare
|
|
25
|
+
* `id` to pick one; nothing is adopted, updated or deleted on a guess.
|
|
26
|
+
*/
|
|
27
|
+
export declare class LitellmModelAmbiguousNameError extends LitellmModelAmbiguousNameError_base<{
|
|
28
|
+
readonly modelName: string;
|
|
29
|
+
readonly ids: readonly string[];
|
|
30
|
+
}> {
|
|
31
|
+
get message(): string;
|
|
32
|
+
}
|
|
33
|
+
declare const LitellmModelUnreadableError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
34
|
+
readonly _tag: "LitellmModelUnreadableError";
|
|
35
|
+
} & Readonly<A>;
|
|
36
|
+
/** `GET /model/info` answered something that is not a list of deployments. */
|
|
37
|
+
export declare class LitellmModelUnreadableError extends LitellmModelUnreadableError_base<{
|
|
38
|
+
readonly reason: string;
|
|
39
|
+
}> {
|
|
40
|
+
get message(): string;
|
|
41
|
+
}
|
|
42
|
+
declare const LitellmModelAbsentAfterWriteError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
43
|
+
readonly _tag: "LitellmModelAbsentAfterWriteError";
|
|
44
|
+
} & Readonly<A>;
|
|
45
|
+
/**
|
|
46
|
+
* A create or update returned no error, yet no read answers a deployment with the id it was written
|
|
47
|
+
* under: not in the list, and not by the id it would carry.
|
|
48
|
+
*/
|
|
49
|
+
export declare class LitellmModelAbsentAfterWriteError extends LitellmModelAbsentAfterWriteError_base<{
|
|
50
|
+
readonly modelName: string;
|
|
51
|
+
readonly id: string;
|
|
52
|
+
}> {
|
|
53
|
+
get message(): string;
|
|
54
|
+
}
|
|
55
|
+
declare const LitellmModelNotConvergedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
56
|
+
readonly _tag: "LitellmModelNotConvergedError";
|
|
57
|
+
} & Readonly<A>;
|
|
58
|
+
/**
|
|
59
|
+
* The write returned no error but the deployment still differs from the declaration. The PATCH
|
|
60
|
+
* merge writes the keys it was sent (`update_db_model` at v1.103.0); a field the read-back still
|
|
61
|
+
* shows different is refused here instead of being reported as converged.
|
|
62
|
+
*/
|
|
63
|
+
export declare class LitellmModelNotConvergedError extends LitellmModelNotConvergedError_base<{
|
|
64
|
+
readonly modelName: string;
|
|
65
|
+
readonly id: string;
|
|
66
|
+
readonly fields: readonly string[];
|
|
67
|
+
}> {
|
|
68
|
+
get message(): string;
|
|
69
|
+
}
|
|
70
|
+
declare const LitellmModelForeignRowError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
71
|
+
readonly _tag: "LitellmModelForeignRowError";
|
|
72
|
+
} & Readonly<A>;
|
|
73
|
+
/**
|
|
74
|
+
* A reconcile with no state found a live row under the declared name whose id is not the one this
|
|
75
|
+
* declaration would create, and nothing vouchsafes it: writing over it would take over another
|
|
76
|
+
* owner's deployment. `replace` says whether this generation is a replace's new identity (a changed
|
|
77
|
+
* declared id), which `--adopt` does not cover — the object must be removed first.
|
|
78
|
+
*/
|
|
79
|
+
export declare class LitellmModelForeignRowError extends LitellmModelForeignRowError_base<{
|
|
80
|
+
readonly modelName: string;
|
|
81
|
+
readonly id: string;
|
|
82
|
+
readonly replace: boolean;
|
|
83
|
+
}> {
|
|
84
|
+
get message(): string;
|
|
85
|
+
}
|
|
86
|
+
declare const LitellmModelPriorGenerationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
87
|
+
readonly _tag: "LitellmModelPriorGenerationError";
|
|
88
|
+
} & Readonly<A>;
|
|
89
|
+
/**
|
|
90
|
+
* The row a reconcile found is served from the proxy's config file (`model_info.db_model: false`),
|
|
91
|
+
* not from the database, so the DB API cannot manage it. Remove it from the config file first.
|
|
92
|
+
*/
|
|
93
|
+
/**
|
|
94
|
+
* The live row a stateless reconcile found is an OLDER generation of this FQN's own state chain
|
|
95
|
+
* (`attr.id` walked through `old`). It is still the serving deployment: the replacement that
|
|
96
|
+
* followed it never committed. Taking the row over would store that id on the new generation, and
|
|
97
|
+
* `destroy()` then deletes the old generation by the same id.
|
|
98
|
+
* ⛔ THE RECOVERY IS STATE, NOT THE ROW. `alchemy state rm` deletes the state record and leaves the
|
|
99
|
+
* deployment; deleting the live row takes the serving model out of its group.
|
|
100
|
+
*/
|
|
101
|
+
export declare class LitellmModelPriorGenerationError extends LitellmModelPriorGenerationError_base<{
|
|
102
|
+
readonly modelName: string;
|
|
103
|
+
readonly id: string;
|
|
104
|
+
readonly fqn: string;
|
|
105
|
+
}> {
|
|
106
|
+
get message(): string;
|
|
107
|
+
}
|
|
108
|
+
declare const LitellmModelConfigFileRowError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
109
|
+
readonly _tag: "LitellmModelConfigFileRowError";
|
|
110
|
+
} & Readonly<A>;
|
|
111
|
+
export declare class LitellmModelConfigFileRowError extends LitellmModelConfigFileRowError_base<{
|
|
112
|
+
readonly modelName: string;
|
|
113
|
+
readonly id: string;
|
|
114
|
+
}> {
|
|
115
|
+
get message(): string;
|
|
116
|
+
}
|
|
117
|
+
export type ModelError = models.AddNewModelModelNewPostError | models.DeleteModelModelDeletePostError | models.GetModelInfoV1ModelInfoError | models.PatchModelModelModelIdUpdatePatchError | BadRequest | NotFound | LitellmModelInvalidError | LitellmModelAmbiguousNameError | LitellmModelUnreadableError | LitellmModelAbsentAfterWriteError | LitellmModelNotConvergedError | LitellmModelForeignRowError | LitellmModelPriorGenerationError | LitellmModelConfigFileRowError;
|
|
118
|
+
export {};
|
|
119
|
+
//# sourceMappingURL=model-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-errors.d.ts","sourceRoot":"","sources":["../../src/litellm/model-errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,KAAK,MAAM,MAAM,2CAA2C,CAAC;;;;AAGzE,yFAAyF;AACzF,qBAAa,wBAAyB,SAAQ,8BAA6C;IACzF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED,8EAA8E;AAC9E,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;;;;AAED;;;GAGG;AACH,qBAAa,iCAAkC,SAAQ,uCAErD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,6BAA8B,SAAQ,mCAEjD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAK7B;CACF;;;;AAED;;;;;GAKG;AACH,qBAAa,2BAA4B,SAAQ,iCAAgD;IAC/F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAQ7B;CACF;;;;AAED;;;GAGG;AACH;;;;;;;GAOG;AACH,qBAAa,gCAAiC,SAAQ,sCAEpD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAQ7B;CACF;;;;AAED,qBAAa,8BAA+B,SAAQ,oCAElD;IACA,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAM7B;CACF;AAED,MAAM,MAAM,UAAU,GAClB,MAAM,CAAC,4BAA4B,GACnC,MAAM,CAAC,+BAA+B,GACtC,MAAM,CAAC,4BAA4B,GACnC,MAAM,CAAC,sCAAsC,GAC7C,UAAU,GACV,QAAQ,GACR,wBAAwB,GACxB,8BAA8B,GAC9B,2BAA2B,GAC3B,iCAAiC,GACjC,6BAA6B,GAC7B,2BAA2B,GAC3B,gCAAgC,GAChC,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Refusals, wire bodies, the read shape and the comparison for `LiteLLM.Model`, testable without
|
|
3
|
+
* a server. Credential handling is model-credential.ts's; the URL rules are mcp-server-url.ts's.
|
|
4
|
+
*
|
|
5
|
+
* ⛔ WHAT IS COMPARED, WITH ENCRYPTION IN MIND. LiteLLM stores `litellm_params` encrypted when the
|
|
6
|
+
* proxy runs with a database master key (`prisma_client.py`, `encrypt_value`, tag v1.103.0) and
|
|
7
|
+
* answers a row whose `litellm_params` are decrypted, with `api_key` stripped (measured at
|
|
8
|
+
* v1.103.0) — `/v2/model/info`'s docstring still says api keys and api_base are left out. So:
|
|
9
|
+
* - `model_name`, `model_info.id`, `mode`, `base_model` and `access_groups` are compared from
|
|
10
|
+
* the fields the read returns.
|
|
11
|
+
* - `model`, `api_base` and `api_key` are compared through a DIGEST of the DECLARED values
|
|
12
|
+
* (`declaredDigest`), carried in attributes as `paramsSeal`, never a digest of the live row.
|
|
13
|
+
* A plan therefore reports drift when the declaration changes and stays quiet when the proxy
|
|
14
|
+
* hides a field it was told before — the false-drift answer the encrypted row leaves no other
|
|
15
|
+
* way to. A field the proxy DOES return (`model`) is additionally compared when the read
|
|
16
|
+
* carries it; the seal is what decides when the read says nothing.
|
|
17
|
+
* ⛔ A LIVE `api_key` IS NEVER OVERWRITTEN BY AN ADOPTED ROW'S NOTHING. `apiKey` omitted on an
|
|
18
|
+
* adopted row sends no `api_key` and the live reference is kept; `differing` reports no drift
|
|
19
|
+
* for it. Declaring `apiKey` is what moves the row onto `os.environ/NAME`.
|
|
20
|
+
* ⛔ EVERYTHING AN EXISTING ROW NEEDS GOES TO ONE PATCH `/model/{model_id}/update`. At the tag
|
|
21
|
+
* the SDK was generated from (OpenAPI 1.103.0), POST `/model/update`'s `update_model` REBUILDS
|
|
22
|
+
* `litellm_params` from the parsed request model and REPLACES the column: a key the model does
|
|
23
|
+
* not declare (`extra_headers`, `weight`, `order`) is DELETED from the stored row, and a
|
|
24
|
+
* non-`None` pydantic default (`false` on the five flags in `LEAVE_ALONE_PARAMS`) overwrites
|
|
25
|
+
* it — measured on a throwaway 1.103.0 proxy, and the reason a params POST is never sent. The
|
|
26
|
+
* PATCH route's `update_db_model` instead MERGES: sent keys land, the rest of the row is
|
|
27
|
+
* preserved, and a JSON `null` keeps the stored value. So one PATCH carries the managed
|
|
28
|
+
* `litellm_params` (with `null` for those five flags), the `model_name` when it changed, and
|
|
29
|
+
* the `model_info` fields — `access_groups`, `mode`, `base_model`, and the row's own `id`, so
|
|
30
|
+
* an adopt-by-id re-affirms the row it pinned. `model_name` is sent only when it changed,
|
|
31
|
+
* because a same-name write would collide with another deployment in the group (model.ts).
|
|
32
|
+
*/
|
|
33
|
+
import type * as models from '@distilled.cloud/litellm/model_management';
|
|
34
|
+
import { type ModelAttributes, type ModelProps } from './model-types.ts';
|
|
35
|
+
/** The first reason a declaration is refused, or `undefined`. Pure: no environment, no server. */
|
|
36
|
+
export declare const firstProblem: (props: ModelProps) => string | undefined;
|
|
37
|
+
/** The digest of the DECLARED values, for `paramsSeal`. Pure: no environment, no lookup. */
|
|
38
|
+
export declare const declaredDigest: (props: ModelProps) => string;
|
|
39
|
+
/**
|
|
40
|
+
* Wire names of the fields where the live row and the declaration disagree.
|
|
41
|
+
*
|
|
42
|
+
* `model` is compared only when the read carries it (an encrypted row omits it); the seal decides
|
|
43
|
+
* otherwise, and model.ts's diff turns a changed seal into an update. `model_name` mismatch on a
|
|
44
|
+
* pinned id is identity drift — replace in model.ts, update here only when the name changed and
|
|
45
|
+
* the id stayed.
|
|
46
|
+
*/
|
|
47
|
+
export declare const differing: (live: ModelAttributes, props: ModelProps) => readonly string[];
|
|
48
|
+
/**
|
|
49
|
+
* One row of `/model/info`, as attributes. ⛔ Copies no `litellm_params` field but `model`, and
|
|
50
|
+
* only when the read returns an OBJECT: the fields a row hides (`api_key` is stripped at
|
|
51
|
+
* v1.103.0) are never mistaken for declared values — `api_base` and any `api_key` are never
|
|
52
|
+
* copied at all. `dbModel` records `model_info.db_model` (false = served from the proxy's config
|
|
53
|
+
* file), defaulting to true when the read omits it. The digest is the caller's (model.ts fills
|
|
54
|
+
* `paramsSeal` from state, a row cannot supply one).
|
|
55
|
+
*/
|
|
56
|
+
export declare const toAttributes: (row: Record<string, unknown>) => ModelAttributes;
|
|
57
|
+
/** A create names the group and pins the id it asked for on `model_info` of the POST body. */
|
|
58
|
+
export declare const createBody: (props: ModelProps, modelId: string) => models.AddNewModelModelNewPostRequest;
|
|
59
|
+
/**
|
|
60
|
+
* PATCH `/model/{model_id}/update`: everything an existing row needs, in the ONE write a
|
|
61
|
+
* converge fires (model.ts). `update_db_model` MERGES (v1.103.0, measured), so:
|
|
62
|
+
* - `litellm_params` carries the managed keys (with `null` for the five non-`None` defaults
|
|
63
|
+
* this resource does not own); the merge keeps every stored key the declaration does not
|
|
64
|
+
* own (`extra_headers`, `weight`, `order`), which is exactly what POST `/model/update`
|
|
65
|
+
* would DELETE by rebuilding the column.
|
|
66
|
+
* - `model_info` carries `access_groups` (always present: an omitted list is "no groups" and
|
|
67
|
+
* must be able to clear), `mode` and `base_model` only when declared, and the row's own
|
|
68
|
+
* `id`, so an adopt-by-id re-affirms the row it pinned.
|
|
69
|
+
* - `model_name` only when it changed: a same-name write would collide with a sibling
|
|
70
|
+
* deployment in the group (model.ts). Not a seal stamp: a matching row records `paramsSeal`
|
|
71
|
+
* locally (model.ts).
|
|
72
|
+
*
|
|
73
|
+
* ⚠️ `Record`, then a widening cast, for the same reason as {@link modelInfoOf}: the generated
|
|
74
|
+
* 1.103.0 `LitellmTypesRouterModelInfo` declares neither `access_groups` nor `mode`, while the
|
|
75
|
+
* vendor model allows both (`extra="allow"`) and the read answers both.
|
|
76
|
+
*/
|
|
77
|
+
export declare const patchBody: (props: ModelProps, live: ModelAttributes) => Record<string, unknown>;
|
|
78
|
+
//# sourceMappingURL=model-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-form.d.ts","sourceRoot":"","sources":["../../src/litellm/model-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,2CAA2C,CAAC;AACzE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,UAAU,EAGhB,MAAM,kBAAkB,CAAC;AAI1B,kGAAkG;AAClG,eAAO,MAAM,YAAY,UAAW,UAAU,KAAG,MAAM,GAAG,SA+BzD,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,cAAc,UAAW,UAAU,KAAG,MAA+C,CAAC;AAKnG;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,SAAU,eAAe,SAAS,UAAU,KAAG,SAAS,MAAM,EAUnF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,QAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,eAoB3D,CAAC;AAqDF,8FAA8F;AAC9F,eAAO,MAAM,UAAU,UACd,UAAU,WACR,MAAM,KACd,MAAM,CAAC,8BAOT,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,UAAW,UAAU,QAAQ,eAAe,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAQ1F,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as Effect from 'effect/Effect';
|
|
2
|
+
import { LitellmModelAmbiguousNameError } from './model-errors.ts';
|
|
3
|
+
import type { ModelAttributes, ModelProps } from './model-types.ts';
|
|
4
|
+
/**
|
|
5
|
+
* The live row among the LISTED ones, or `undefined`. A pinned id (from state, else declared) wins;
|
|
6
|
+
* otherwise the name decides, and an ambiguous name is refused.
|
|
7
|
+
*/
|
|
8
|
+
export declare const locate: (rows: readonly ModelAttributes[], props: ModelProps, output: ModelAttributes | undefined) => Effect.Effect<never, LitellmModelAmbiguousNameError, never> | Effect.Effect<ModelAttributes | undefined, never, never>;
|
|
9
|
+
/** The id a create asks for: the recorded one, else the declared one, else a deterministic name. */
|
|
10
|
+
export declare const wantedId: (id: string, instanceId: string, props: ModelProps, output: ModelAttributes | undefined) => Effect.Effect<string, never, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage>;
|
|
11
|
+
/** The live row this declaration means, from the list, else from the table by the id it would use. */
|
|
12
|
+
export declare const findLive: (id: string, instanceId: string, props: ModelProps, output: ModelAttributes | undefined) => Effect.Effect<ModelAttributes | undefined, import("@distilled.cloud/caddy").BadRequest | LitellmModelAmbiguousNameError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/model_management").GetModelInfoV1ModelInfoError, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
|
|
13
|
+
//# sourceMappingURL=model-locate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-locate.d.ts","sourceRoot":"","sources":["../../src/litellm/model-locate.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,MAAM,SACX,SAAS,eAAe,EAAE,SACzB,UAAU,UACT,eAAe,GAAG,SAAS,2HAapC,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,QAAQ,OACf,MAAM,cACE,MAAM,SACX,UAAU,UACT,eAAe,GAAG,SAAS,mHAMyC,CAAC;AAE/E,sGAAsG;AACtG,eAAO,MAAM,QAAQ,OACf,MAAM,cACE,MAAM,SACX,UAAU,UACT,eAAe,GAAG,SAAS,2ZAMjC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The five LiteLLM `/model/*` calls `LiteLLM.Model` uses, through the SDK's typed operations in
|
|
3
|
+
* `@distilled.cloud/litellm/model_management` (LiteLLM 1.103.0; names verified in the generated
|
|
4
|
+
* source, never guessed):
|
|
5
|
+
*
|
|
6
|
+
* list `getModelInfoV1ModelInfo` GET /model/info
|
|
7
|
+
* read `getModelInfoV1ModelInfo` GET /model/info?litellm_model_id={id}
|
|
8
|
+
* create `addNewModelModelNewPost` POST /model/new
|
|
9
|
+
* patch `patchModelModelModelIdUpdatePatch` PATCH /model/{model_id}/update
|
|
10
|
+
* delete `deleteModelModelDeletePost` POST /model/delete
|
|
11
|
+
*
|
|
12
|
+
* The SDK is generated from LiteLLM OpenAPI **1.103.0** (`model_management.ts`'s header). At that
|
|
13
|
+
* tag, and at v1.100.0, `model_info_v1` raises HTTP 400 when the router has no such deployment
|
|
14
|
+
* (`proxy_server.py`, "Model id = … not found on litellm proxy"), not 404. The same 400 is also
|
|
15
|
+
* "no rights" or a bad filter. The PATCH route's `update_db_model` MERGES: `litellm_params`,
|
|
16
|
+
* `model_name` and `model_info` (`access_groups`, `mode`, `base_model`) all land without
|
|
17
|
+
* rebuilding the column, which is the one write `LiteLLM.Model` converges with (model-form.ts).
|
|
18
|
+
* POST `/model/update` REBUILDS `litellm_params` and deletes stored keys the request model does
|
|
19
|
+
* not declare, so this resource never sends it.
|
|
20
|
+
*
|
|
21
|
+
* ⛔ LIST-FIRST READS. One GET of the whole list answers a group, an id and absence unambiguously,
|
|
22
|
+
* the way `budget-operations.ts` reads. The by-id read is the same route with the
|
|
23
|
+
* `litellm_model_id` filter, used only where the list cannot decide (a write-back on a row the
|
|
24
|
+
* list may not show yet).
|
|
25
|
+
* ⛔ NO MESSAGE SNIFFING (S21). The by-id read's 400 is undeclared on the generated operation, so
|
|
26
|
+
* it decodes at run time as the shared `BadRequest` (`HTTP_STATUS_MAP`). `catchTag` matches the
|
|
27
|
+
* tag — the same match `deleteModel` uses — so a later declared class with that tag is still
|
|
28
|
+
* seen. A 400 is absence only when a re-list also lacks the id. A 404 is the same absence.
|
|
29
|
+
* Any other failure propagates.
|
|
30
|
+
* ⛔ THE ROW'S PARAMS ARE NEVER READ INTO STATE: `toAttributes` (model-form.ts) copies `model`
|
|
31
|
+
* only when `litellm_params` is an object, and never `api_base` or `api_key` — the v1.103.0
|
|
32
|
+
* read answers params DECRYPTED but STRIPS `api_key` (measured). What was declared is
|
|
33
|
+
* remembered as a digest instead.
|
|
34
|
+
* ⚠️ Unlike pass-through endpoints, each deployment is its own DB row: no semaphore.
|
|
35
|
+
*/
|
|
36
|
+
import * as models from '@distilled.cloud/litellm/model_management';
|
|
37
|
+
import type { BadRequest } from '@distilled.cloud/litellm/Errors';
|
|
38
|
+
import * as Effect from 'effect/Effect';
|
|
39
|
+
import { type LitellmOpContext } from './operations.ts';
|
|
40
|
+
import type { ModelAttributes } from './model-types.ts';
|
|
41
|
+
import { LitellmModelUnreadableError } from './model-errors.ts';
|
|
42
|
+
/** Every deployment row, config-file ones included. This is the read that locates and diffs. */
|
|
43
|
+
export declare const listModels: () => Effect.Effect<readonly ModelAttributes[], models.GetModelInfoV1ModelInfoError | LitellmModelUnreadableError, LitellmOpContext>;
|
|
44
|
+
export declare const readModelRow: (modelId: string) => Effect.Effect<ModelAttributes | undefined, BadRequest | LitellmModelUnreadableError | models.GetModelInfoV1ModelInfoError, LitellmOpContext>;
|
|
45
|
+
/** POST /model/new. The answer carries no usable row (the fake answers `{}`), so the id asked for is the one tracked. */
|
|
46
|
+
export declare const createModel: (body: models.AddNewModelModelNewPostRequest) => Effect.Effect<void, models.AddNewModelModelNewPostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
47
|
+
/**
|
|
48
|
+
* PATCH `/model/{model_id}/update`. The ONE write a converge of an existing row fires: its merge
|
|
49
|
+
* carries `litellm_params`, `model_name` and `model_info` together (model-form.ts).
|
|
50
|
+
*/
|
|
51
|
+
export declare const patchModel: (body: Record<string, unknown>) => Effect.Effect<void, models.PatchModelModelModelIdUpdatePatchError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
52
|
+
/**
|
|
53
|
+
* Idempotent BY THIS FUNCTION, not by the vendor. A `BadRequest` re-lists and is swallowed only
|
|
54
|
+
* when the id is genuinely absent — the same delete can also be refused for lack of rights or a
|
|
55
|
+
* disconnected DB, which leaves the row live and must never be reported as done
|
|
56
|
+
* (budget-operations.ts's rule; never the message text, S21).
|
|
57
|
+
*/
|
|
58
|
+
export declare const deleteModel: (modelId: string) => Effect.Effect<void, import("@distilled.cloud/caddy").BadGateway | models.BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | LitellmModelUnreadableError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | models.UnprocessableEntity, LitellmOpContext>;
|
|
59
|
+
//# sourceMappingURL=model-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-operations.d.ts","sourceRoot":"","sources":["../../src/litellm/model-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,KAAK,MAAM,MAAM,2CAA2C,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAmChE,gGAAgG;AAChG,eAAO,MAAM,UAAU,QAAO,MAAM,CAAC,MAAM,CACzC,SAAS,eAAe,EAAE,EAC1B,MAAM,CAAC,4BAA4B,GAAG,2BAA2B,EACjE,gBAAgB,CACgE,CAAC;AAenF,eAAO,MAAM,YAAY,YAAa,MAAM,iJAgBzC,CAAC;AAEJ,yHAAyH;AACzH,eAAO,MAAM,WAAW,SAAU,MAAM,CAAC,8BAA8B,yHACC,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,UAAU,SAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,mIAKjC,CAAC;AAExB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,YAAa,MAAM,spBAUxC,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a `LiteLLM.Model` declares (props) and what is remembered about it (attributes).
|
|
3
|
+
*
|
|
4
|
+
* ⛔ NO CREDENTIAL VALUE IS A PROP OR AN ATTRIBUTE (S25). Alchemy persists props AND attributes
|
|
5
|
+
* unencrypted (`StateEncoding.ts` writes a `Redacted` value's inner string beside its tag,
|
|
6
|
+
* measured on alchemy 2.0.0-beta.79), so `apiKey` is `{ fromEnv: 'NAME' }`: the NAME is stored,
|
|
7
|
+
* the value lives only in the deploying process and on the wire, and it is sent in LiteLLM's own
|
|
8
|
+
* reference form `os.environ/NAME` — so the PROXY reads it from ITS environment at call time and
|
|
9
|
+
* the proxy's own DB row never carries a literal either. A `Redacted` prop would still land in
|
|
10
|
+
* state as plaintext (mcp-server-types.ts's reasoning, same store).
|
|
11
|
+
* ⛔ THE LIVE ROW'S `litellm_params` ARE NEVER MIRRORED INTO ATTRIBUTES. At v1.103.0 the read
|
|
12
|
+
* answers the stored params DECRYPTED but STRIPS `api_key` (measured on a live 1.103.0 proxy),
|
|
13
|
+
* and anything mirrored would land in state as plaintext — Alchemy persists attributes
|
|
14
|
+
* unencrypted. So a read compares only the visible fields the proxy returns, and this
|
|
15
|
+
* resource's own attributes carry a DIGEST of the DECLARED values (`paramsSeal`), never the
|
|
16
|
+
* values: that is how a plan notices a declared credential moved when the read cannot show it.
|
|
17
|
+
* ⚠️ NOT MODELLED, on purpose: the rest of `litellm_params` (rpm/tpm, timeouts, fallbacks,
|
|
18
|
+
* wildcard routing params, `mock_response`, vertex/aws credential blobs, …), cost fields on
|
|
19
|
+
* `model_info` beyond what the read returns, `teams`, and the config-file-only rows
|
|
20
|
+
* (`db_model: false`) — a reconcile that finds one REFUSES it (model-errors.ts): the DB
|
|
21
|
+
* API cannot manage what the proxy serves from its config file.
|
|
22
|
+
*/
|
|
23
|
+
import type { FromEnv } from '../secrets/write-only.ts';
|
|
24
|
+
/**
|
|
25
|
+
* The LiteLLM-SDK path of the deployment: a provider prefix, then the upstream model, such as
|
|
26
|
+
* `xai/grok-4.7` or `cloudflare/@cf/meta/llama-3.1-8b-instruct`. Required: LiteLLM needs it to
|
|
27
|
+
* pick the provider handler, and an unprefixed name is ambiguous.
|
|
28
|
+
*/
|
|
29
|
+
export type ModelLiteLLMPath = string;
|
|
30
|
+
export interface ModelProps {
|
|
31
|
+
/**
|
|
32
|
+
* The group name callers use (`/chat/completions` `model: …`), one group = one or more
|
|
33
|
+
* deployments. This is also how an existing row is ADOPTED: the live row whose `model_name`
|
|
34
|
+
* equals it. ⛔ Renaming a group changes nothing upstream — LiteLLM keys deployments by id —
|
|
35
|
+
* so a changed `modelName` with no pinned `id` is a REPLACE: the new group gets a fresh id, and
|
|
36
|
+
* the old row survives under the default `RemovalPolicy.retain()` (opt in to `destroy()` to
|
|
37
|
+
* delete it). A pinned `id` is that row: the same deployment is renamed in place
|
|
38
|
+
* (`patchBody` sends `model_name`), and keys routing to the old name miss.
|
|
39
|
+
*/
|
|
40
|
+
readonly modelName: string;
|
|
41
|
+
/**
|
|
42
|
+
* Pins the live row (adopts by id) or chooses the id a create asks for. Without it, a live row
|
|
43
|
+
* is found by `modelName` and a new one gets a deterministic physical name. A group name is
|
|
44
|
+
* shared by several deployments on a live proxy: one id selects exactly one.
|
|
45
|
+
*/
|
|
46
|
+
readonly id?: string;
|
|
47
|
+
/** The LiteLLM-SDK path, provider prefix included (`xai/grok-4.7`, `cloudflare/@cf/...`). */
|
|
48
|
+
readonly model: string;
|
|
49
|
+
/**
|
|
50
|
+
* The upstream base URL, when the deployment needs one. ⛔ Refused if it carries userinfo, a
|
|
51
|
+
* fragment or a secret-looking query parameter (`?token=…`): the URL is a prop, so it lands in
|
|
52
|
+
* state. Declare the credential as `apiKey` instead.
|
|
53
|
+
*/
|
|
54
|
+
readonly apiBase?: string;
|
|
55
|
+
/**
|
|
56
|
+
* The upstream credential, by the NAME of the environment variable that holds it — sent to the
|
|
57
|
+
* proxy as LiteLLM's own reference form `os.environ/NAME`, never a literal value. Omitted
|
|
58
|
+
* leaves the live credential exactly as the proxy holds it (an adopted row is never blanked).
|
|
59
|
+
*/
|
|
60
|
+
readonly apiKey?: FromEnv;
|
|
61
|
+
/** The deployment's capabilities, `mode` in LiteLLM's model_info — `chat`, `embedding`, …. */
|
|
62
|
+
readonly mode?: string;
|
|
63
|
+
/** The upstream model this one masquerades as, for cost/prompt mapping. */
|
|
64
|
+
readonly baseModel?: string;
|
|
65
|
+
/** Access groups this deployment belongs to. Always compared (as a set), default empty. */
|
|
66
|
+
readonly accessGroups?: readonly string[];
|
|
67
|
+
}
|
|
68
|
+
export interface ModelAttributes {
|
|
69
|
+
readonly id: string;
|
|
70
|
+
readonly modelName: string;
|
|
71
|
+
/** Whether the row is served from the database (`model_info.db_model`); false = config-file row. */
|
|
72
|
+
readonly dbModel: boolean;
|
|
73
|
+
/** The provider-prefixed path as the live row carries it (null when the read omits it). */
|
|
74
|
+
readonly model: string | null;
|
|
75
|
+
readonly mode: string | null;
|
|
76
|
+
readonly baseModel: string | null;
|
|
77
|
+
readonly accessGroups: readonly string[];
|
|
78
|
+
/**
|
|
79
|
+
* Digest of the DECLARED params this write would send (`scrypt:<salt>:<digest>`), or `''`.
|
|
80
|
+
* ⛔ Never the values, never a digest of the LIVE row. This is how a plan notices that the
|
|
81
|
+
* environment variable behind `apiKey` rotated: the read strips `api_key`, so the seal is the
|
|
82
|
+
* only signal a declared credential moved (model-form.ts's `declaredDigest`).
|
|
83
|
+
*/
|
|
84
|
+
readonly paramsSeal: string;
|
|
85
|
+
}
|
|
86
|
+
/** Whether a value is not a string with something in it. Takes `unknown`: a declaration can say anything. */
|
|
87
|
+
export declare const isBlank: (value: unknown) => boolean;
|
|
88
|
+
export declare const MODES: readonly string[];
|
|
89
|
+
/** Whether `model` carries a provider prefix, LiteLLM's `litellm.utils.get_llm_provider` rule. */
|
|
90
|
+
export declare const hasProviderPrefix: (model: string) => boolean;
|
|
91
|
+
//# sourceMappingURL=model-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-types.d.ts","sourceRoot":"","sources":["../../src/litellm/model-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,UAAU;IACzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,8FAA8F;IAC9F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oGAAoG;IACpG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,6GAA6G;AAC7G,eAAO,MAAM,OAAO,UAAW,OAAO,KAAG,OACS,CAAC;AAEnD,eAAO,MAAM,KAAK,EAAE,SAAS,MAAM,EAelC,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,UAAW,MAAM,KAAG,OAAwC,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `LiteLLM.Model` — one deployment row of LiteLLM's model registry (`/model/info`), an upstream
|
|
3
|
+
* model the proxy's router serves under a group name. A group name can carry SEVERAL deployments
|
|
4
|
+
* (that is LiteLLM's load balancing); this resource owns exactly one row.
|
|
5
|
+
*
|
|
6
|
+
* ★ ADOPT BY NAME. `modelName` finds the live row whose group name matches; declare `id` to pin one
|
|
7
|
+
* instead. A live row with no state is `Unowned`, so it needs `--adopt`. A name matching more
|
|
8
|
+
* than one listed row is refused, never guessed at (`LitellmModelAmbiguousNameError`).
|
|
9
|
+
* ★ `defaultRemovalPolicy: 'retain'` — a deployment's removal takes it out of its routing group for
|
|
10
|
+
* every key that reaches it. Opt in with `.pipe(RemovalPolicy.destroy())`.
|
|
11
|
+
* ⛔ THE CREDENTIAL IS `{ fromEnv: 'NAME' }`, NEVER A VALUE (S25): it is sent in LiteLLM's own
|
|
12
|
+
* reference form `os.environ/NAME` and the proxy resolves it in its own environment — nothing
|
|
13
|
+
* here reads `process.env` (model-credential.ts), so a value could never be sealed truthfully.
|
|
14
|
+
* A row's stored params come back DECRYPTED at v1.103.0 but with `api_key` STRIPPED (measured),
|
|
15
|
+
* so a plan compares the visible fields plus a digest of the DECLARED values (`paramsSeal`) —
|
|
16
|
+
* never the values themselves, which belong in the proxy's DB only (model-form.ts).
|
|
17
|
+
* ⚠️ A RENAME IS A NEW GROUP when the id is not pinned: the old row survives under 'retain', the
|
|
18
|
+
* new group gets a fresh deterministic id. With a pinned id the SAME row is renamed — the caller
|
|
19
|
+
* chose the row (model-types.ts).
|
|
20
|
+
* ⚠️ UNMEASURED AT 1.103.0, guarded by a read back: whether `/model/new` honours a supplied
|
|
21
|
+
* `model_info.id`. The answer is an untyped body, so the id ASKED FOR is the one tracked
|
|
22
|
+
* (model-operations.ts); a proxy that issued its own id fails loudly
|
|
23
|
+
* (`LitellmModelAbsentAfterWriteError`) instead of recording a row it cannot identify.
|
|
24
|
+
*/
|
|
25
|
+
import { Resource } from 'alchemy';
|
|
26
|
+
import type { Input } from 'alchemy/Input';
|
|
27
|
+
import * as Provider from 'alchemy/Provider';
|
|
28
|
+
import * as Effect from 'effect/Effect';
|
|
29
|
+
import { LitellmModelAbsentAfterWriteError, LitellmModelConfigFileRowError, LitellmModelInvalidError, LitellmModelNotConvergedError } from './model-errors.ts';
|
|
30
|
+
import type { ModelAttributes, ModelProps } from './model-types.ts';
|
|
31
|
+
export type { ModelAttributes, ModelProps };
|
|
32
|
+
export type { ModelError } from './model-errors.ts';
|
|
33
|
+
export interface LiteLLMModel extends Resource<'LiteLLM.Model', ModelProps, ModelAttributes> {
|
|
34
|
+
}
|
|
35
|
+
export declare const LiteLLMModel: import("alchemy").ResourceClass<LiteLLMModel>;
|
|
36
|
+
export declare const isLiteLLMModel: (value: unknown) => value is LiteLLMModel;
|
|
37
|
+
type Args<P> = {
|
|
38
|
+
fqn: string;
|
|
39
|
+
id: string;
|
|
40
|
+
instanceId: string;
|
|
41
|
+
output: ModelAttributes | undefined;
|
|
42
|
+
} & P;
|
|
43
|
+
/** ⛔ TEST-ONLY EXPORT. Not on index.ts's barrel. */
|
|
44
|
+
export declare const modelHandlers: {
|
|
45
|
+
/**
|
|
46
|
+
* ⛔ WITH NO `output` THIS IS ALCHEMY'S ADOPTION PROBE, AND THE ONLY PLAN-TIME HOOK A NEW MODEL
|
|
47
|
+
* GETS — so the refusals run here too, as a defect (mcp-server.ts: the cold-start probe must
|
|
48
|
+
* fail the plan, and a recovery read must degrade to "nothing recovered", which only a defect
|
|
49
|
+
* does). The v1.103.0 read answers params decrypted with `api_key` stripped, so this refusal
|
|
50
|
+
* is the declaration's (`firstProblem`), before Apply commits props into unencrypted state.
|
|
51
|
+
*/
|
|
52
|
+
read: ({ id, instanceId, olds, output }: Args<{
|
|
53
|
+
olds: ModelProps;
|
|
54
|
+
}>) => Effect.Effect<ModelAttributes | undefined, import("@distilled.cloud/caddy").BadRequest | import("./model-errors.ts").LitellmModelAmbiguousNameError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/model_management").GetModelInfoV1ModelInfoError, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
|
|
55
|
+
diff: ({ instanceId, news, output, }: {
|
|
56
|
+
instanceId: string;
|
|
57
|
+
news: Input<ModelProps>;
|
|
58
|
+
output: ModelAttributes | undefined;
|
|
59
|
+
}) => Effect.Effect<{
|
|
60
|
+
readonly action: 'replace';
|
|
61
|
+
readonly deleteFirst: false;
|
|
62
|
+
} | {
|
|
63
|
+
readonly deleteFirst?: never;
|
|
64
|
+
readonly action: 'noop';
|
|
65
|
+
} | {
|
|
66
|
+
readonly deleteFirst?: never;
|
|
67
|
+
readonly action: 'update';
|
|
68
|
+
} | undefined, LitellmModelInvalidError, never>;
|
|
69
|
+
reconcile: ({ fqn, id, instanceId, news, output }: Args<{
|
|
70
|
+
news: ModelProps;
|
|
71
|
+
}>) => Effect.Effect<{
|
|
72
|
+
id: string;
|
|
73
|
+
modelName: string;
|
|
74
|
+
dbModel: boolean;
|
|
75
|
+
model: string | null;
|
|
76
|
+
mode: string | null;
|
|
77
|
+
baseModel: string | null;
|
|
78
|
+
accessGroups: readonly string[];
|
|
79
|
+
paramsSeal: string;
|
|
80
|
+
}, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/caddy").BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | LitellmModelAbsentAfterWriteError | import("./model-errors.ts").LitellmModelAmbiguousNameError | LitellmModelConfigFileRowError | import("./model-errors.ts").LitellmModelForeignRowError | LitellmModelInvalidError | LitellmModelNotConvergedError | import("./model-errors.ts").LitellmModelPriorGenerationError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/model_management").UnprocessableEntity, import("alchemy").InstanceId | import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
|
|
81
|
+
delete: ({ output }: {
|
|
82
|
+
output: ModelAttributes;
|
|
83
|
+
}) => Effect.Effect<void, import("@distilled.cloud/caddy").BadGateway | import("@distilled.cloud/litellm/model_management").BadRequest | import("@distilled.cloud/caddy").ConfigError | import("@distilled.cloud/caddy").GatewayTimeout | import("effect/unstable/http/HttpClientError").HttpClientError | import("@distilled.cloud/caddy").InternalServerError | import("./model-errors.ts").LitellmModelUnreadableError | import("@distilled.cloud/litellm/Errors").LitellmParseError | import("@distilled.cloud/caddy").ServiceUnavailable | import("@distilled.cloud/caddy").TooManyRequests | import("@distilled.cloud/caddy").Unauthorized | import("@distilled.cloud/litellm/Errors").UnknownLitellmError | import("@distilled.cloud/litellm/model_management").UnprocessableEntity, import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
|
|
84
|
+
/** ⛔ EMPTY: adoption is an explicit act (`--adopt`), and no ownership mark exists to filter by. */
|
|
85
|
+
list: () => Effect.Effect<never[], never, never>;
|
|
86
|
+
};
|
|
87
|
+
export declare const LiteLLMModelProvider: () => import("effect/Layer").Layer<Provider.Provider<LiteLLMModel>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/litellm/Protocol").LitellmOpContext>;
|
|
88
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/litellm/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAY3B,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEpE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,YAAa,SAAQ,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,eAAe,CAAC;CAAG;AAE/F,eAAO,MAAM,YAAY,+CAEvB,CAAC;AAEH,eAAO,MAAM,cAAc,UAAW,OAAO,KAAG,KAAK,IAAI,YACe,CAAC;AASzE,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;CACrC,GAAG,CAAC,CAAC;AAEN,oDAAoD;AACpD,eAAO,MAAM,aAAa;IACxB;;;;;;OAMG;IACH,IAAI,qCAAqC,IAAI,CAAC;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;IA4BnE,IAAI,kCAID;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;KACrC;yBASsB,SAAS;;;;yBAYb,MAAM;;;yBACN,QAAQ;;IAG3B,SAAS,0CAA0C,IAAI,CAAC;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;;;;;;;;;;IAiF7E,MAAM,eAAe;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE;IAEhD,mGAAmG;IACnG,IAAI;CACL,CAAC;AAEF,eAAO,MAAM,oBAAoB,8LACuD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire bodies, comparison and refusals for `LiteLLM.PolicyAttachment`, testable without a server.
|
|
3
|
+
*
|
|
4
|
+
* ★ TWO ATTACHMENTS ARE "THE SAME" WHEN EVERY FIELD IS: the policy, the scope, the four selector SETS
|
|
5
|
+
* and the priority. That is the only identity an attachment has (policy-attachment-types.ts), and
|
|
6
|
+
* it is what adoption and the read back both use.
|
|
7
|
+
*/
|
|
8
|
+
import type * as policies from '@distilled.cloud/litellm/policy_engine';
|
|
9
|
+
import type { PolicyAttachmentAttributes, PolicyAttachmentProps } from './policy-attachment-types.ts';
|
|
10
|
+
/** The first reason a declaration is refused, or `undefined`. Runs before any request. */
|
|
11
|
+
export declare const firstProblem: (props: PolicyAttachmentProps) => string | undefined;
|
|
12
|
+
/** One attachment row. `undefined` is "not an attachment", and so is a config-file one. */
|
|
13
|
+
export declare const toAttributes: (value: unknown) => PolicyAttachmentAttributes | undefined;
|
|
14
|
+
/** Whether a live row is defined in config.yaml (its synthetic id is `config-<n>`): out of reach of the API. */
|
|
15
|
+
export declare const isConfigRow: (value: unknown) => boolean;
|
|
16
|
+
/** Wire names of the fields where live and declared disagree. Empty means "the same attachment". */
|
|
17
|
+
export declare const differing: (live: PolicyAttachmentAttributes, props: PolicyAttachmentProps) => readonly string[];
|
|
18
|
+
export declare const createBody: (props: PolicyAttachmentProps) => policies.CreatePolicyAttachmentPoliciesAttachmentsPostRequest;
|
|
19
|
+
//# sourceMappingURL=policy-attachment-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-attachment-form.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-attachment-form.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,KAAK,QAAQ,MAAM,wCAAwC,CAAC;AAYxE,OAAO,KAAK,EACV,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,8BAA8B,CAAC;AAItC,0FAA0F;AAC1F,eAAO,MAAM,YAAY,UAAW,qBAAqB,KAAG,MAAM,GAAG,SA2BpE,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,0BAA0B,GAAG,SAgB1E,CAAC;AAEF,gHAAgH;AAChH,eAAO,MAAM,WAAW,UAAW,OAAO,KAAG,OACO,CAAC;AAErD,oGAAoG;AACpG,eAAO,MAAM,SAAS,SACd,0BAA0B,SACzB,qBAAqB,KAC3B,SAAS,MAAM,EAOjB,CAAC;AAEF,eAAO,MAAM,UAAU,UACd,qBAAqB,KAC3B,QAAQ,CAAC,oDAQV,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The three LiteLLM `/policies/attachments*` calls `LiteLLM.PolicyAttachment` uses, through the SDK's
|
|
3
|
+
* typed operations in `@distilled.cloud/litellm/policy_engine` (LiteLLM 1.103.0):
|
|
4
|
+
*
|
|
5
|
+
* list `listPolicyAttachmentsPoliciesAttachmentsListGet` GET /policies/attachments/list
|
|
6
|
+
* create `createPolicyAttachmentPoliciesAttachmentsPost` POST /policies/attachments
|
|
7
|
+
* delete `deletePolicyAttachmentPoliciesAttachmentsAttachmentIdDelete` DELETE /policies/attachments/{id}
|
|
8
|
+
*
|
|
9
|
+
* ★ THERE IS NO UPDATE OPERATION, because the API has none (policy-attachment-types.ts). The by-id
|
|
10
|
+
* `GET` is not used either: the list carries every field and answers absence without a 404.
|
|
11
|
+
* ★ THE LIST MERGES IN CONFIG-FILE ATTACHMENTS (`definition_location: "config"`, ids `config-<n>`),
|
|
12
|
+
* which the API cannot delete. `listAttachments` returns database rows only.
|
|
13
|
+
* ⚠️ MOST FAILURES ARE A PLAIN 500 (`policy_endpoints.py` wraps everything in `except Exception` and
|
|
14
|
+
* answers `HTTPException(500, detail=str(e))`), and the SDK retries 5xx with backoff. The two
|
|
15
|
+
* answers that are not: a policy with no production version is a 404, and a concrete team, key or model
|
|
16
|
+
* selector that resolves to nothing is a 400 (`PolicyValidator.find_invalid_scope_entries`), so a
|
|
17
|
+
* `teams` entry must exist BEFORE its attachment: declare it as `team.teamAlias`. Wildcard patterns
|
|
18
|
+
* are let through, and may match nothing today.
|
|
19
|
+
* ★ DELETE IS IDEMPOTENT BY A REAL READ: a failed DELETE (a missing id is a 404) is swallowed only when
|
|
20
|
+
* the list no longer has the id; otherwise the ORIGINAL error is re-raised.
|
|
21
|
+
*/
|
|
22
|
+
import * as policies from '@distilled.cloud/litellm/policy_engine';
|
|
23
|
+
import * as Effect from 'effect/Effect';
|
|
24
|
+
import type { PolicyAttachmentAttributes } from './policy-attachment-types.ts';
|
|
25
|
+
import { LitellmRegistryUnreadableError } from './registry-errors.ts';
|
|
26
|
+
/** Every DATABASE attachment. Config-file ones are dropped here, once. */
|
|
27
|
+
export declare const listAttachments: () => Effect.Effect<readonly PolicyAttachmentAttributes[], LitellmRegistryUnreadableError | policies.LitellmOpError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
28
|
+
/** The created row, which carries the id LiteLLM issued. `undefined` when the answer is not one. */
|
|
29
|
+
export declare const createAttachment: (body: policies.CreatePolicyAttachmentPoliciesAttachmentsPostRequest) => Effect.Effect<PolicyAttachmentAttributes | undefined, policies.CreatePolicyAttachmentPoliciesAttachmentsPostError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
30
|
+
export declare const deleteAttachment: (attachmentId: string) => Effect.Effect<void, policies.DeletePolicyAttachmentPoliciesAttachmentsAttachmentIdDeleteError, import("@distilled.cloud/litellm/Credentials").Credentials>;
|
|
31
|
+
//# sourceMappingURL=policy-attachment-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-attachment-operations.d.ts","sourceRoot":"","sources":["../../src/litellm/policy-attachment-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,QAAQ,MAAM,wCAAwC,CAAC;AACnE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAQtE,0EAA0E;AAC1E,eAAO,MAAM,eAAe,kLAWzB,CAAC;AAEJ,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,SACrB,QAAQ,CAAC,oDAAoD,mLAIlE,CAAC;AAEJ,eAAO,MAAM,gBAAgB,iBAAkB,MAAM,+JAiBlD,CAAC"}
|