Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
coderai
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexlab
coderai
Commits
1b3cbb36
Commit
1b3cbb36
authored
May 06, 2026
by
Stefy Lanza (nextime / spora )
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: add multimodal client defaults
parent
63014197
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
86 additions
and
1 deletion
+86
-1
test_manual_multimodal_test_client.py
tests/test_manual_multimodal_test_client.py
+36
-1
manual_multimodal_test_client.py
tools/manual_multimodal_test_client.py
+50
-0
No files found.
tests/test_manual_multimodal_test_client.py
View file @
1b3cbb36
from
tools.manual_multimodal_test_client
import
build_parser
,
choose_mode_interactively
,
parse_args
from
tools.manual_multimodal_test_client
import
(
MODE_DEFAULTS
,
build_parser
,
choose_mode_interactively
,
parse_args
,
resolve_mode_config
,
)
def
test_parse_args_accepts_direct_mode_and_global_overrides
():
def
test_parse_args_accepts_direct_mode_and_global_overrides
():
...
@@ -31,3 +37,32 @@ def test_parse_args_leaves_mode_empty_for_interactive_fallback():
...
@@ -31,3 +37,32 @@ def test_parse_args_leaves_mode_empty_for_interactive_fallback():
args
=
parse_args
([])
args
=
parse_args
([])
assert
args
.
mode
is
None
assert
args
.
mode
is
None
def
test_resolve_mode_config_uses_mode_defaults_when_overrides_absent
(
tmp_path
):
args
=
parse_args
([
"audio-generation"
,
"--output-dir"
,
str
(
tmp_path
)])
config
=
resolve_mode_config
(
args
,
selected_mode
=
"audio-generation"
)
assert
config
[
"mode"
]
==
"audio-generation"
assert
config
[
"url"
]
==
"http://127.0.0.1:6745"
assert
config
[
"model"
]
==
MODE_DEFAULTS
[
"audio-generation"
][
"model"
]
assert
config
[
"prompt"
]
==
MODE_DEFAULTS
[
"audio-generation"
][
"prompt"
]
assert
config
[
"output_dir"
]
==
tmp_path
def
test_resolve_mode_config_prefers_explicit_model_prompt_and_url_overrides
(
tmp_path
):
args
=
parse_args
([
"video-generation"
,
"--url"
,
"http://example.invalid:9999"
,
"--model"
,
"video:custom-model"
,
"--prompt"
,
"Custom prompt"
,
"--output-dir"
,
str
(
tmp_path
),
])
config
=
resolve_mode_config
(
args
,
selected_mode
=
"video-generation"
)
assert
config
[
"url"
]
==
"http://example.invalid:9999"
assert
config
[
"model"
]
==
"video:custom-model"
assert
config
[
"prompt"
]
==
"Custom prompt"
assert
config
[
"output_dir"
]
==
tmp_path
tools/manual_multimodal_test_client.py
View file @
1b3cbb36
from
__future__
import
annotations
from
__future__
import
annotations
import
argparse
import
argparse
from
pathlib
import
Path
MODES
=
[
MODES
=
[
...
@@ -13,6 +14,39 @@ MODES = [
...
@@ -13,6 +14,39 @@ MODES = [
]
]
MODE_DEFAULTS
=
{
"llm"
:
{
"model"
:
"text"
,
"prompt"
:
"Reply with a short test acknowledgement."
,
},
"transcription"
:
{
"model"
:
"audio"
,
"prompt"
:
None
,
"audio_file"
:
"samples/transcription.wav"
,
},
"audio-generation"
:
{
"model"
:
"audio_gen"
,
"prompt"
:
"Generate a short calm ambient audio test clip."
,
"response_format"
:
"url"
,
},
"video-generation"
:
{
"model"
:
"video"
,
"prompt"
:
"Generate a short test clip of a rotating cube."
,
"response_format"
:
"url"
,
},
"video-doubt"
:
{
"model"
:
"vision"
,
"prompt"
:
"Describe the important events in this video."
,
"video_file"
:
"samples/question-video.mp4"
,
},
"music-audio-doubt"
:
{
"model"
:
"audio"
,
"prompt"
:
"Describe the music and prominent sounds in this audio."
,
"audio_file"
:
"samples/question-audio.wav"
,
},
}
def
build_parser
()
->
argparse
.
ArgumentParser
:
def
build_parser
()
->
argparse
.
ArgumentParser
:
parser
=
argparse
.
ArgumentParser
(
description
=
"Manual multimodal smoke-test client"
)
parser
=
argparse
.
ArgumentParser
(
description
=
"Manual multimodal smoke-test client"
)
parser
.
add_argument
(
"mode"
,
nargs
=
"?"
,
choices
=
MODES
)
parser
.
add_argument
(
"mode"
,
nargs
=
"?"
,
choices
=
MODES
)
...
@@ -31,6 +65,22 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
...
@@ -31,6 +65,22 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
return
build_parser
()
.
parse_args
(
argv
)
return
build_parser
()
.
parse_args
(
argv
)
def
resolve_mode_config
(
args
:
argparse
.
Namespace
,
selected_mode
:
str
)
->
dict
:
defaults
=
MODE_DEFAULTS
[
selected_mode
]
return
{
"mode"
:
selected_mode
,
"url"
:
args
.
url
.
rstrip
(
"/"
),
"token"
:
args
.
token
,
"model"
:
args
.
model
or
defaults
.
get
(
"model"
),
"prompt"
:
args
.
prompt
if
args
.
prompt
is
not
None
else
defaults
.
get
(
"prompt"
),
"output_dir"
:
Path
(
args
.
output_dir
),
"file"
:
args
.
file
,
"audio_file"
:
args
.
audio_file
or
defaults
.
get
(
"audio_file"
),
"video_file"
:
args
.
video_file
or
defaults
.
get
(
"video_file"
),
"response_format"
:
defaults
.
get
(
"response_format"
),
}
def
choose_mode_interactively
()
->
str
:
def
choose_mode_interactively
()
->
str
:
for
idx
,
mode
in
enumerate
(
MODES
,
start
=
1
):
for
idx
,
mode
in
enumerate
(
MODES
,
start
=
1
):
print
(
f
"{idx}. {mode}"
)
print
(
f
"{idx}. {mode}"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment