Python: [Python] as_agent_framework_tool drops parameter defaults (optionals become required)
I maintainer di solito rispondono entro 3 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 85/100
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
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
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/semantic-kernel
-
Python: Bug: Anthropic, Bedrock, Google AI and Vertex AI tool formatters ignore include_in_function_choices=FalseForse già presa @wasim-builds l’ha presa 2 giorni fa. Apertapython triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
microsoft/semantic-kernel#14615 ·
I maintainer di solito rispondono entro 3 giorni
-
Python: Bug: AnnotationContent and StreamingAnnotationContent to_element writes CitationType.X, so annotations in a rendered chat history fail to parseForse già presa @CRYPTONIKAV l’ha presa 6 giorni fa. Apertapython triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
microsoft/semantic-kernel#14590 ·
I maintainer di solito rispondono entro 3 giorni
-
Python: Bug: TimePlugin timeZoneOffset and timeZoneName always return an empty stringForse già presa @jeevan1098 l’ha presa 4 giorni fa. Apertapython triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
microsoft/semantic-kernel#14583 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
.Net: gpt-image-1 is the default image model in the .NET OpenAI connector, and OpenAI shuts it down on October 23Forse già presa @nightcityblade l’ha presa 16 giorni fa. Aperta.NET triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
microsoft/semantic-kernel#14526 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
Python: VolatileMemoryStore.get_batch and get_nearest_matches ignore with_embeddings=False (deepcopy result is discarded)Forse già presa @VANDRANKI l’ha presa 18 giorni fa. Apertapython triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
microsoft/semantic-kernel#14522 ·
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di microsoft/semantic-kernel
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
I maintainer di solito rispondono entro 1 giorno
-
[Docs] README/PRIVACY still name AppCenter although v1.5.6.0+ uses the Microsoft Store Services SDKAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
swisstopo/swissgeol-boreholes-suite#3086 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: wiki jump bugApertabug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
frontend
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Altinn/altinn-studio#21355 ·
I maintainer di solito rispondono entro 1 giorno