Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Python: [Python] as_agent_framework_tool drops parameter defaults (optionals become required)

Aperta Adatta ai principianti
#14,481 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 3 giorni

@Yasser-Ameur ci sta già lavorando.

Dal 26/9/2026.

  • #14489 di @Yasser-Ameur — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
85/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
api

Direzione di ricerca

Inizia in semantic_kernel/functions/kernel_function.py, all'interno di as_agent_framework_tool e del relativo ciclo di costruzione dei campi. Esegui la riproduzione minima dell'issue oppure esamina lo schema InputModel generato per confermare i campi attualmente obbligatori. Il lavoro è completato quando i parametri con valori predefiniti rimangono opzionali e mantengono top_k=5 e include_meta=False, mentre query rimane obbligatorio.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

python triage

Description

KernelFunction.as_agent_framework_tool builds an agent-framework InputModel but drops parameter defaults. After assigning a Field(..., default=...) for optional params, the next line unconditionally overwrites the same key with a no-default Field, so every optional becomes required in the JSON schema.

Environment

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

Minimal repro

The bug is in the field-building loop (exact code from as_agent_framework_tool):

from typing import Annotated
from pydantic import Field, create_model
from semantic_kernel.functions import KernelPlugin, kernel_function

@kernel_function(name="search", description="search things")
def search(
    query: Annotated[str, "search query"],
    top_k: Annotated[int, "number of results"] = 5,
    include_meta: Annotated[bool, "include metadata"] = False,
) -> str:
    return f"{query}:{top_k}:{include_meta}"

fn = KernelPlugin(name="S", functions=[search])["search"]

fields = {}
for param in fn.parameters:
    if param.include_in_function_choices:
        if param.default_value is not None:
            fields[param.name] = (
                param.type_,
                Field(description=param.description, default=param.default_value),
            )
        fields[param.name] = (param.type_, Field(description=param.description))  # overwrites

Model = create_model("InputModel", **fields)
print(Model.model_json_schema().get("required"))
# ACTUAL: ['query', 'top_k', 'include_meta']
# EXPECTED: ['query']  (top_k / include_meta optional with defaults)

(as_agent_framework_tool() itself also needs agent-framework-core; the loop above is the same code path.)

Expected

Optional kernel function parameters with defaults remain optional in the agent-framework InputModel / schema (top_k=5, include_meta=False).

Actual

All included params are required; defaults are discarded. Especially misleading for False/0 because default_value is not None is true, yet the default is still overwritten.

Root cause (pointer)

semantic_kernel/functions/kernel_function.py — as_agent_framework_tool (~field loop): missing else: around the no-default assignment.

Suggested fix direction

if param.default_value is not None:
    fields[param.name] = (..., Field(..., default=param.default_value))
else:
    fields[param.name] = (..., Field(...))

(Also prefer param.type_object over the string param.type_ if available.)

Lingua principale
C#
Stelle
28.7k
Fork
4.8k
Merge medio
2g 12h
PR unite (30g)
22

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di microsoft/semantic-kernel

Tutte le issue di microsoft/semantic-kernel

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.