dspy.Code¶
dspy.Code
¶
Bases: Type
Code type in DSPy.
This type is useful for code generation and code analysis.
Example 1: dspy.Code as output type in code generation:
import dspy
dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))
class CodeGeneration(dspy.Signature):
'''Generate python code to answer the question.'''
question: str = dspy.InputField(description="The question to answer")
code: dspy.Code["java"] = dspy.OutputField(description="The code to execute")
predict = dspy.Predict(CodeGeneration)
result = predict(question="Given an array, find if any of the two numbers sum up to 10")
print(result.code)
Example 2: dspy.Code as input type in code analysis:
import dspy
import inspect
dspy.configure(lm=dspy.LM("openai/gpt-4o-mini"))
class CodeAnalysis(dspy.Signature):
'''Analyze the time complexity of the function.'''
code: dspy.Code["python"] = dspy.InputField(description="The function to analyze")
result: str = dspy.OutputField(description="The time complexity of the function")
predict = dspy.Predict(CodeAnalysis)
def sleepsort(x):
import time
for i in x:
time.sleep(i)
print(i)
result = predict(code=inspect.getsource(sleepsort))
print(result.result)
Functions¶
adapt_to_native_lm_feature(signature: type[Signature], field_name: str, lm: LM, lm_kwargs: dict[str, Any]) -> type[Signature]
classmethod
¶
Adapt the custom type to the native LM feature if possible.
When the LM and configuration supports the related native LM feature, e.g., native tool calling, native
reasoning, etc., we adapt the signature and lm_kwargs to enable the native LM feature.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
signature
|
type[Signature]
|
The DSPy signature for the LM call. |
required |
field_name
|
str
|
The name of the field in the signature to adapt to the native LM feature. |
required |
lm
|
LM
|
The LM instance. |
required |
lm_kwargs
|
dict[str, Any]
|
The keyword arguments for the LM call, subject to in-place updates if adaptation if required. |
required |
Returns:
| Type | Description |
|---|---|
type[Signature]
|
The adapted signature. If the custom type is not natively supported by the LM, return the original |
type[Signature]
|
signature. |
Source code in dspy/adapters/types/base_type.py
description() -> str
classmethod
¶
Source code in dspy/adapters/types/code.py
extract_custom_type_from_annotation(annotation)
classmethod
¶
Extract all custom types from the annotation.
This is used to extract all custom types from the annotation of a field, while the annotation can
have arbitrary level of nesting. For example, we detect Tool is in list[dict[str, Tool]].
Source code in dspy/adapters/types/base_type.py
is_streamable() -> bool
classmethod
¶
parse_lm_response(response: str | dict[str, Any]) -> Optional[Type]
classmethod
¶
Parse a LM response into the custom type.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
response
|
str | dict[str, Any]
|
A LM response. |
required |
Returns:
| Type | Description |
|---|---|
Optional[Type]
|
A custom type object. |
Source code in dspy/adapters/types/base_type.py
parse_stream_chunk(chunk: ModelResponseStream) -> Optional[Type]
classmethod
¶
Parse a stream chunk into the custom type.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
chunk
|
ModelResponseStream
|
A stream chunk. |
required |
Returns:
| Type | Description |
|---|---|
Optional[Type]
|
A custom type object or None if the chunk is not for this custom type. |
Source code in dspy/adapters/types/base_type.py
serialize_model()
¶
validate_input(data: Any)
classmethod
¶
Source code in dspy/adapters/types/code.py
:::