Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
aisbf
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
aisbf
Commits
e6fd64d9
Commit
e6fd64d9
authored
May 12, 2026
by
Stefy Lanza (nextime / spora )
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: expose market references in dashboard choices
parent
a965a01e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
81 additions
and
6 deletions
+81
-6
providers.py
aisbf/routes/dashboard/providers.py
+37
-6
test_market_reference_imports.py
tests/routes/test_market_reference_imports.py
+44
-0
No files found.
aisbf/routes/dashboard/providers.py
View file @
e6fd64d9
...
@@ -53,6 +53,29 @@ def _list_dashboard_market_references(db, user_id: int, reference_type: str) ->
...
@@ -53,6 +53,29 @@ def _list_dashboard_market_references(db, user_id: int, reference_type: str) ->
return
references
return
references
def
_market_reference_provider_choice
(
reference
:
dict
)
->
dict
:
return
{
'provider_id'
:
reference
[
'id'
],
'config'
:
{
'type'
:
reference
.
get
(
'type'
)
or
reference
.
get
(
'source_type'
)
or
'market_reference'
,
'name'
:
reference
.
get
(
'name'
)
or
reference
[
'id'
],
'market_reference'
:
True
,
'read_only'
:
True
,
'models'
:
[],
},
}
def
_market_reference_rotation_choice
(
reference
:
dict
)
->
dict
:
return
{
'rotation_id'
:
reference
[
'id'
],
'name'
:
reference
.
get
(
'name'
)
or
reference
[
'id'
],
'type'
:
'rotation'
,
'market_reference'
:
True
,
'read_only'
:
True
,
}
def
_serialize_provider_usage_snapshot
(
snapshot
):
def
_serialize_provider_usage_snapshot
(
snapshot
):
if
not
snapshot
:
if
not
snapshot
:
return
None
return
None
...
@@ -1226,8 +1249,10 @@ async def dashboard_rotations(request: Request):
...
@@ -1226,8 +1249,10 @@ async def dashboard_rotations(request: Request):
# Database user: use ONLY their own providers
# Database user: use ONLY their own providers
db
=
DatabaseRegistry
.
get_config_database
()
db
=
DatabaseRegistry
.
get_config_database
()
user_providers
=
db
.
get_user_providers
(
current_user_id
)
user_providers
=
db
.
get_user_providers
(
current_user_id
)
available_providers
=
[
p
[
'provider_id'
]
for
p
in
user_providers
]
provider_references
=
_list_dashboard_market_references
(
db
,
current_user_id
,
'provider'
)
providers_meta
=
{
p
[
'provider_id'
]:
{
"type"
:
p
[
'config'
]
.
get
(
'type'
,
'openai'
)}
for
p
in
user_providers
}
available_provider_rows
=
user_providers
+
[
_market_reference_provider_choice
(
reference
)
for
reference
in
provider_references
]
available_providers
=
[
p
[
'provider_id'
]
for
p
in
available_provider_rows
]
providers_meta
=
{
p
[
'provider_id'
]:
{
"type"
:
p
[
'config'
]
.
get
(
'type'
,
'openai'
)}
for
p
in
available_provider_rows
}
# Check for success parameter
# Check for success parameter
success
=
request
.
query_params
.
get
(
'success'
)
success
=
request
.
query_params
.
get
(
'success'
)
...
@@ -1502,18 +1527,24 @@ async def dashboard_autoselect(request: Request):
...
@@ -1502,18 +1527,24 @@ async def dashboard_autoselect(request: Request):
# Get only user's own rotations
# Get only user's own rotations
user_rotations
=
db
.
get_user_rotations
(
current_user_id
)
user_rotations
=
db
.
get_user_rotations
(
current_user_id
)
available_rotations
=
[
rot
[
'rotation_id'
]
for
rot
in
user_rotations
]
rotation_references
=
_list_dashboard_market_references
(
db
,
current_user_id
,
'rotation'
)
available_rotation_rows
=
user_rotations
+
[
_market_reference_rotation_choice
(
reference
)
for
reference
in
rotation_references
]
available_rotations
=
[
rot
[
'rotation_id'
]
if
'rotation_id'
in
rot
else
rot
[
'id'
]
for
rot
in
available_rotation_rows
]
# Get only user's own providers
# Get only user's own providers
user_providers
=
db
.
get_user_providers
(
current_user_id
)
user_providers
=
db
.
get_user_providers
(
current_user_id
)
provider_references
=
_list_dashboard_market_references
(
db
,
current_user_id
,
'provider'
)
available_provider_rows
=
user_providers
+
[
_market_reference_provider_choice
(
reference
)
for
reference
in
provider_references
]
available_models
=
[]
available_models
=
[]
user_providers_meta
=
{
p
[
'provider_id'
]:
{
"type"
:
p
[
'config'
]
.
get
(
'type'
,
'openai'
)}
for
p
in
user_provider
s
}
user_providers_meta
=
{
p
[
'provider_id'
]:
{
"type"
:
p
[
'config'
]
.
get
(
'type'
,
'openai'
)}
for
p
in
available_provider_row
s
}
# Add user rotation IDs
# Add user rotation IDs
for
rotation_id
in
available_rotations
:
for
rotation
in
available_rotation_rows
:
rotation_id
=
rotation
[
'rotation_id'
]
if
'rotation_id'
in
rotation
else
rotation
[
'id'
]
rotation_name
=
rotation
.
get
(
'name'
)
or
rotation_id
available_models
.
append
({
available_models
.
append
({
'id'
:
rotation_id
,
'id'
:
rotation_id
,
'name'
:
f
'{rotation_
id
} (rotation)'
,
'name'
:
f
'{rotation_
name
} (rotation)'
,
'type'
:
'rotation'
'type'
:
'rotation'
})
})
...
...
tests/routes/test_market_reference_imports.py
View file @
e6fd64d9
...
@@ -398,6 +398,27 @@ def test_dashboard_rotations_renders_market_reference_alongside_local_rotation(m
...
@@ -398,6 +398,27 @@ def test_dashboard_rotations_renders_market_reference_alongside_local_rotation(m
assert
'copyRotation(
\'
market-ref:2
\'
)'
not
in
response
.
text
assert
'copyRotation(
\'
market-ref:2
\'
)'
not
in
response
.
text
def
test_dashboard_rotations_offers_market_provider_reference_in_provider_choices
(
monkeypatch
):
db
=
MarketReferenceImportDbStub
()
_seed_dashboard_market_reference_mix
(
db
)
capture
=
TemplateCapture
()
client
=
TestClient
(
app
)
_login_as_user
(
client
)
monkeypatch
.
setattr
(
dashboard_market
,
"DatabaseRegistry"
,
RegistryStub
(
db
))
from
aisbf.routes.dashboard
import
providers
as
dashboard_providers
monkeypatch
.
setattr
(
dashboard_providers
,
"DatabaseRegistry"
,
RegistryStub
(
db
))
monkeypatch
.
setattr
(
dashboard_providers
,
"_templates"
,
capture
)
response
=
client
.
get
(
"/dashboard/rotations"
)
assert
response
.
status_code
==
200
context
=
capture
.
calls
[
-
1
][
"context"
]
available_providers
=
json
.
loads
(
context
[
"available_providers"
])
assert
"local-provider"
in
available_providers
assert
"market-ref:1"
in
available_providers
def
test_dashboard_autoselect_renders_market_reference_alongside_local_entry
(
monkeypatch
):
def
test_dashboard_autoselect_renders_market_reference_alongside_local_entry
(
monkeypatch
):
db
=
MarketReferenceImportDbStub
()
db
=
MarketReferenceImportDbStub
()
_seed_dashboard_market_reference_mix
(
db
)
_seed_dashboard_market_reference_mix
(
db
)
...
@@ -420,6 +441,29 @@ def test_dashboard_autoselect_renders_market_reference_alongside_local_entry(mon
...
@@ -420,6 +441,29 @@ def test_dashboard_autoselect_renders_market_reference_alongside_local_entry(mon
assert
'copyAutoselect(
\'
market-ref:3
\'
)'
not
in
response
.
text
assert
'copyAutoselect(
\'
market-ref:3
\'
)'
not
in
response
.
text
def
test_dashboard_autoselect_offers_market_rotation_reference_in_rotation_choices
(
monkeypatch
):
db
=
MarketReferenceImportDbStub
()
_seed_dashboard_market_reference_mix
(
db
)
capture
=
TemplateCapture
()
client
=
TestClient
(
app
)
_login_as_user
(
client
)
monkeypatch
.
setattr
(
dashboard_market
,
"DatabaseRegistry"
,
RegistryStub
(
db
))
from
aisbf.routes.dashboard
import
providers
as
dashboard_providers
monkeypatch
.
setattr
(
dashboard_providers
,
"DatabaseRegistry"
,
RegistryStub
(
db
))
monkeypatch
.
setattr
(
dashboard_providers
,
"_templates"
,
capture
)
response
=
client
.
get
(
"/dashboard/autoselect"
)
assert
response
.
status_code
==
200
context
=
capture
.
calls
[
-
1
][
"context"
]
available_rotations
=
json
.
loads
(
context
[
"available_rotations"
])
available_models
=
json
.
loads
(
context
[
"available_models"
])
assert
"local-rotation"
in
available_rotations
assert
"market-ref:2"
in
available_rotations
assert
{
"id"
:
"market-ref:2"
,
"name"
:
"Alice Rotation (rotation)"
,
"type"
:
"rotation"
}
in
available_models
def
test_import_market_listing_creates_market_reference_for_provider
(
monkeypatch
):
def
test_import_market_listing_creates_market_reference_for_provider
(
monkeypatch
):
db
=
MarketReferenceImportDbStub
()
db
=
MarketReferenceImportDbStub
()
client
=
TestClient
(
app
)
client
=
TestClient
(
app
)
...
...
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