docs(oci-dac): tutorial 40 + empirical Qwen confirmation + website#25
Merged
Conversation
Adds the runnable end-to-end tutorial and threads the DAC story
through every reader-facing surface, with one piece of empirical
evidence: locus actually drove a real Qwen DAC in uk-london-1.
What ships
----------
- ``examples/tutorial_40_oci_dac.py`` — 5-part walkthrough:
1. Auto-routing (OCID prefix → SDK transport).
2. Configure an Agent against a DAC (pre-build via ``get_model``
because ``Agent``'s strict ``AgentConfig`` rejects
provider-specific kwargs on the keyword path).
3. ``complete()`` against the DAC.
4. ``stream()`` against the DAC — real SSE deltas.
5. ``Agent`` + ``@tool`` against the DAC, with an honest note on
Qwen's ``<tool_call>`` text-block format vs OpenAI's
structured ``tool_calls`` and the two ways to fix it.
Live-tested against Luigi's London DAC. Sample output captured in
the how-to page.
- ``docs/how-to/oci-dac.md`` — adds the "Confirmed working — Qwen
on a London DAC" section with the actual run output (model
identification, token usage, streaming chunks). Documents the
Qwen ``<tool_call>`` quirk and the two remediation paths.
- ``README.md`` capability grid: new ``🏗 OCI Dedicated AI Cluster``
row linking to the how-to page.
- ``README.md`` tutorials section: tutorial counter 39 → 40, new
``OCI`` track row covering 29 + 40.
- ``docs/index.md`` capability grid: same DAC row added.
- ``docs/index.md`` tutorials section: counter 39 → 40 and tutorial
40 added to the Track-5 production list.
Run output (with the DAC env vars set)
--------------------------------------
- Part 3: complete() — "I am a large-scale language model developed
by Alibaba Cloud, known as Qwen." (17 / 18 tokens)
- Part 4: stream() — real SSE deltas: "1, 2, 3, 4, 5".
- Part 5: agent + tool — Qwen emits ``<tool_call>`` text block;
documented as a model-side rather than locus-side limitation.
Validation
----------
- 3205 unit tests pass, no regressions.
- ``hatch run check`` clean.
- Tutorial runs cleanly in mock mode (no env vars) and live mode
(with OCI_DAC_* env vars).
Privacy
-------
No tenancy / endpoint OCIDs are committed — the tutorial reads
them from env vars. The how-to references the test endpoint by
region only.
Signed-off-by: Federico Kamelhar <federico.kamelhar@oracle.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #24 (DAC support landed). This wires the full reader-facing story: tutorial, how-to update with empirical Qwen confirmation, README + homepage capability rows, and the bumped tutorial counter.
Tutorial 40 —
examples/tutorial_40_oci_dac.pyFive-part walkthrough, live-tested against Luigi's London DAC:
get_model()(strictAgentConfig)complete()— single round-trip against the DACstream()— real SSE deltasAgent+@tool— wiring + honest note on Qwen's<tool_call>text-block formatLive run output
Captured in the how-to page:
What's proven:
oci:ocid1.generativeaiendpoint....→OCIModel✓DedicatedServingMode(endpoint_id=...)accepted by the live endpoint ✓What's flagged honestly:
<tool_call>{...}</tool_call>text blocks, not OpenAI-style structuredtool_calls. Two remediation paths (deploy-side flag or caller-side post-process) documented in the how-to.Surface updates
docs/how-to/oci-dac.md— new "Confirmed working — Qwen on a London DAC" section with the run output and the tool-call format note.README.mdcapability grid: new🏗 OCI Dedicated AI Clusterrow.README.mdtutorials: counter 39 → 40, newOCItrack row covering 29 + 40.docs/index.mdcapability grid: same DAC row added.docs/index.mdtutorials: counter 39 → 40, tutorial 40 added to Track-5.Validation
hatch run checkclean.OCI_DAC_*env vars set).Privacy
No tenancy / endpoint OCIDs in the codebase. The tutorial reads them from env vars; the how-to references only the region.