Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

.Net: [Python] KernelJsonSchemaBuilder maps None to JSON "object" in multi-member unions

オープン 初心者向け
#14,482 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 2 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
74/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python

調査の方向性

semantic_kernel/schema/kernel_json_schema_builder.py から始め、特に TYPE_MAPPING、get_json_schema、handle_complex_type の Union ブランチを確認してください。issue にある複数メンバーの Union ケースを再現し、その後、None が object ではなく JSON Schema null に寄与すること、および生成された関数スキーマが nullable フィールドを正しく処理することを示す回帰テストカバレッジを追加してください。

索引モデルが issue の本文から書いたものです。

説明

.NET python triage

Description

KernelJsonSchemaBuilder maps NoneType to JSON type "object" in multi-member unions. A type like int | str | None becomes anyOf: [integer, string, object] instead of including "null".

This breaks function-calling / agent tool schemas for pydantic model parameters: models may emit {} where null/omit was intended.

Distinct from open #14443 (Ge constraint objects in descriptions).

Environment

  • semantic-kernel==1.44.1 (Python)
  • Python 3.13

Minimal repro

import json
from typing import Annotated
from pydantic import BaseModel, Field
from semantic_kernel.connectors.ai.function_calling_utils import (
    kernel_function_metadata_to_function_call_format,
)
from semantic_kernel.functions import KernelPlugin, kernel_function
from semantic_kernel.schema.kernel_json_schema_builder import KernelJsonSchemaBuilder

direct = KernelJsonSchemaBuilder.build(int | str | None)
print(json.dumps(direct))
# {"anyOf": [{"type": "integer"}, {"type": "string"}, {"type": "object"}]}
# null missing; object stand-in for None

class Payload(BaseModel):
    value: int | str | None = Field(default=None, description="flexible")

@kernel_function(name="handle")
def handle(payload: Annotated[Payload, "payload"]) -> str:
    """handle payload"""
    return str(payload)

fn = KernelPlugin(name="P", functions=[handle])["handle"]
fmt = kernel_function_metadata_to_function_call_format(fn.metadata)
print(json.dumps(fmt["function"]["parameters"]["properties"]["payload"]["properties"]["value"]))
# anyOf includes type object for None

Expected

None in unions should map to JSON Schema "null" (or an equivalent nullable form), not "object".

Actual

anyOf includes {"type": "object"} and no "null".

Root cause (pointer)

semantic_kernel/schema/kernel_json_schema_builder.py — TYPE_MAPPING / get_json_schema default "object"; handle_complex_type Union branch only special-cases 2-arg Optional, not multi-member unions containing None.

Suggested fix direction

Map type(None) → {"type": "null"} in TYPE_MAPPING/get_json_schema, and/or strip None from multi-unions into a proper nullable / anyOf+null form.

主要言語
C#
スター
28.6k
フォーク
4.8k
平均マージ
13時間 24分
マージ済み PR(30日)
11

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

microsoft/semantic-kernel のほかの issue

microsoft/semantic-kernel の issue をすべて見る

似ている issue

C# の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。